如何获取调用上下文菜单的TreeNode?

时间:2011-12-16 14:15:27

标签: c# winforms contextmenu treenode

我有一堆TreeView控件和一堆TreeNodes。每个节点ContextMenu都根据其状态具有不同的MenuItem。所以我目前正在为每个TreeNode附加它自己的ContextMenu。

TreeView tv = new TreeView();
TreeNode tn = New TreeNode();
tn.ContextMenu = GetContextMenu(state);
tv.Nodes.Add(tn);

然后在MenuItem的click事件中,我尝试获取ContextMenu所属的TreeNode。

MenuItem mi = (MenuItem)sender;
ContextMenu tm = mi.GetContextMenu();
var sc = tm.SourceControl;

问题在于tm.SourceControl == null。我注意到TreeNode并非来自Control。这就是SourceControl属性为空的原因吗?如何获取适当的TreeNode对象?甚至是TreeView对象?

1 个答案:

答案 0 :(得分:3)

我不确定你的问题。

当您单击TreeView时,可以执行此操作以获取所选节点并且:

void tvMouseUp(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
    {
        // Select the clicked node
        tv.SelectedNode = tv.GetNodeAt(e.X, e.Y);

        if(tv.SelectedNode != null)
        {
            myContextMenuStrip.Show(tv, e.Location)
        }
    }
}