Find node clicked under context menu

前端 未结 10 1455
故里飘歌
故里飘歌 2020-11-30 21:49

How can I find out which node in a tree list the context menu has been activated? For instance right-clicking a node and selecting an option from the menu.

I can\'t

相关标签:
10条回答
  • 2020-11-30 22:13

    Here is how I do it.

    private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
            e.Node.TreeView.SelectedNode = e.Node;
    }
    
    0 讨论(0)
  • 2020-11-30 22:15

    Reviving this question because I find this to be a much better solution. I use the NodeMouseClick event instead.

    void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if( e.Button == MouseButtons.Right )
        {
            tree.SelectedNode = e.Node;
        }
    }
    
    0 讨论(0)
  • 2020-11-30 22:20

    Similar to Marcus' answer, this was the solution I found worked for me:

    private void treeView_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            treeView.SelectedNode = treeView.GetNodeAt(e.Location);
        }
    }
    

    You need not show the context menu yourself if you set it to each individual node like so:

    TreeNode node = new TreeNode();
    node.ContextMenuStrip = contextMenu;
    

    Then inside the ContextMenu's Opening event, the TreeView.SelectedNode property will reflect the correct node.

    0 讨论(0)
  • 2020-11-30 22:23

    This is a very old question, but I still found it useful. I am using a combination of some of the answers above, because I don't want the right-clicked node to become the selectedNode. If I have the root node selected and want to delete one of it's children, I don't want the child selected when I delete it (I am also doing some work on the selectedNode that I don't want to happen on a right-click). Here is my contribution:

    // Global Private Variable to hold right-clicked Node
    private TreeNode _currentNode = new TreeNode();
    
    // Set Global Variable to the Node that was right-clicked
    private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
            _currentNode = e.Node;
    }
    
    // Do something when the Menu Item is clicked using the _currentNode
    private void toolStripMenuItem_Clicked(object sender, EventArgs e)
    {
        if (_currentNode != null)
            MessageBox.Show(_currentNode.Text);
    }
    
    0 讨论(0)
  • 2020-11-30 22:23

    Another option you could run with is to have a global variable that has the selected node. You would just need to use the TreeNodeMouseClickEventArgs.

    public void treeNode_Click(object sender, TreeNodeMouseClickEventArgs e)
    {
        _globalVariable = e.Node;
    }
    

    Now you have access to that node and it's properties.

    0 讨论(0)
  • 2020-11-30 22:24

    Here is my solution. Put this line into NodeMouseClick event of the TreeView:

     ((TreeView)sender).SelectedNode = e.Node;
    
    0 讨论(0)
提交回复
热议问题