右键单击 TreeView 中的节点,然后使用 c# 弹出一个菜单,其中包含“打开方式”选项 [关闭]

Posted

技术标签:

【中文标题】右键单击 TreeView 中的节点,然后使用 c# 弹出一个菜单,其中包含“打开方式”选项 [关闭]【英文标题】:Right click on Node in TreeView and have a menu pop up with the option of "Open with" using c# [closed] 【发布时间】:2015-11-11 23:20:36 【问题描述】:

我正在使用 Windows 窗体,并且我有一个带有一堆节点的 TreeView。我希望能够右键单击一个节点并弹出一个带有“打开方式”选项的菜单。就像您右键单击文件并说使用 Windows 媒体播放器打开一样。

我知道如何制作鼠标单击事件处理程序,但我不确定下一步该做什么。

任何建议将不胜感激。

【问题讨论】:

Any help would be greatly appreciated.您需要什么样的帮助?谷歌为你?给你写代码? 建议很好,现在我只有鼠标单击事件处理程序。检查它是否是右键单击,但没有选择节点,当我在其中添加一个消息框时,如果我右键单击节点时它永远不会出现。 【参考方案1】:

这是一个简单的方法,只需单击鼠标右键

private void Treeview1_MouseClick(object sender, MouseEventArgs e)
    
        if (e.Button == MouseButtons.Right) 
        
            ContextMenu.Show(Cursor.Position);
        
    

【讨论】:

谢谢你,我有大部分,但我完全忘记了如何通过属性将 contextMenu 添加到 TreeView。我现在都明白了。感谢您的帮助! 没问题。乐于助人。【参考方案2】:

这是Capn Jack 在他的问题Setting the ContextMenuStrip for all nodes on a level in a TreeView? 中的一个聪明答案,关于如何在未首先选择右键单击节点时也显示右键单击节点的上下文菜单:

treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node;

【讨论】:

【参考方案3】:

TreeView 中的上下文菜单。我正在使用 Visual Studio 2022 并且无法弄清楚同样的事情。我有 3 个,并花了很多时间试图找出哪个调用了上下文。与一堆谷歌,主要是 SO,并试验这是我最终做的。

将此添加到表单加载以通过右键单击选择节点。

    treeView1.MouseDown += (sender, args) => treeView1.SelectedNode = treeView1.GetNodeAt(args.X, args.Y);

将上下文菜单条拖放到窗体上,添加所需的任何项目,并将其分配给 TreeView ContextMenuStrip 属性。

选择上下文菜单条,您应该会在 Designer 中看到:

如果你有一个 TreeView:

双击该项目以获取事件。

    private void treeViewCopy_Click(object sender, EventArgs e)
    
        Clipboard.SetText(treeView1.SelectedNode.Text);
    

如果您有多个 TreeView:

如果它们都使用相同的上下文,则将上下文菜单条分配给每个 TreeView。

如果上下文不同,则构建新的上下文菜单并适当地分配它们,然后您可以从那里构建每个项目的点击。或者你可以按照这个。

将此添加到表单加载:

        treeViewResults.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeViewResults_ContextClick);
        treeViewEntity.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeViewEntity_ContextClick);
        treeView1.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeView1_ContextClick);

并添加功能:

    private void treeViewEntity_ContextClick(object sender, ToolStripItemClickedEventArgs e)
    
        GetTree(treeViewEntity, e.ClickedItem.Text);  
      
     private void treeView1_ContextClick(object sender, ToolStripItemClickedEventArgs e)
    
        GetTree(treeView1, e.ClickedItem.Text);         
            
    private void treeViewResults_ContextClick(object sender, ToolStripItemClickedEventArgs e)
    
        GetTree(treeViewResults, e.ClickedItem.Text); 
      

如果 if 使用相同的上下文菜单,所有这些都将运行,这样您就可以打开命令,但如果它们不同,那么:

    private void GetTree(TreeView tree, string command)
    
        if (tree.Focused && tree.SelectedNode != null)
        
            switch (tree.Name)
            
                case "treeViewEntity":
                    break;
                case "treeView1":
                    treeView1Context(treeView1, command);
                    break;
                case "treeViewResults":
                    break;
            
        
     

最后是这个:

    private void treeView1Context(TreeView tree, string command)
     
            switch (command)
            
                case "Copy":
                       Clipboard.SetText(tree.SelectedNode.Text);                            
                    break;
                case "Edit":
                    break;

                                
        
    

【讨论】:

以上是关于右键单击 TreeView 中的节点,然后使用 c# 弹出一个菜单,其中包含“打开方式”选项 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Winform 中使用treeview控件,treeview控件会默认选择最后一个有子节点的节点,怎么解决

查找在上下文菜单下单击的节点

treeview控件使用详解

treeview 单击父节点事件

WPF TreeView - TreeViewItem上的上下文菜单不会出现

c# treeview 知道节点name 如何选中节点!