首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >右键单击TreeView中的节点,然后使用c#弹出一个菜单,其中包含"Open with“选项

右键单击TreeView中的节点,然后使用c#弹出一个菜单,其中包含"Open with“选项
EN

Stack Overflow用户
提问于 2015-08-19 04:47:03
回答 3查看 2.1K关注 0票数 0

我在一个Windows form中工作,我有一个带有一堆节点的TreeView。我希望能够右键单击一个节点,并弹出一个带有“打开方式”选项的菜单。就像你用鼠标右键点击一个文件并说用windows media player打开一样。

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

任何建议都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2015-08-19 06:18:44

这里有一个用鼠标右键点击的简单方法

代码语言:javascript
运行
复制
private void Treeview1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right) 
        {
            ContextMenu.Show(Cursor.Position);
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2021-04-20 14:49:07

这是Capn Jack在他的问题Setting the ContextMenuStrip for all nodes on a level in a TreeView?中的一个聪明的回答,关于当右键单击的节点没有首先被选中时,如何让它的上下文菜单显示出来:

代码语言:javascript
运行
复制
treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node;
票数 0
EN

Stack Overflow用户

发布于 2022-01-31 00:51:56

TreeView中的上下文菜单。我使用的是Visual Studio2022,在解决同样的问题时遇到了麻烦。我有3个,并且花了很多时间试图找出哪一个调用了上下文。使用了一堆Google,大部分都是这样的,并且试验这就是我最终要做的。

将此代码添加到表单加载中,然后单击鼠标右键选择节点。

代码语言:javascript
运行
复制
    treeView1.MouseDown += (sender, args) => treeView1.SelectedNode = treeView1.GetNodeAt(args.X, args.Y);

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

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

如果您有一个TreeView:

双击该项目以获取事件。

代码语言:javascript
运行
复制
    private void treeViewCopy_Click(object sender, EventArgs e)
    {
        Clipboard.SetText(treeView1.SelectedNode.Text);
    }

如果您有多个TreeView:

如果它们都使用相同的上下文,请将上下文菜单栏指定给每个TreeView。

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

将此添加到Form Load:

代码语言:javascript
运行
复制
        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);

并添加以下函数:

代码语言:javascript
运行
复制
    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); 
    }  

如果使用相同的上下文菜单,那么所有这些都将运行,因此您只需打开命令,但如果它们不同,则如下所示:

代码语言:javascript
运行
复制
    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;
            }
        }
    } 

最后是这个:

代码语言:javascript
运行
复制
    private void treeView1Context(TreeView tree, string command)
    { 
            switch (command)
            {
                case "Copy":
                       Clipboard.SetText(tree.SelectedNode.Text);                            
                    break;
                case "Edit":
                    break;

            }                    
        
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32082280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档