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

本文关键字:TreeNode 菜单 上下文 何获得 调用 | 更新日期: 2023-09-27 18:17:59

我有一个带有一堆treenode的TreeView控件。每个节点上下文菜单根据其状态有不同的菜单项。所以我目前附加每个TreeNode自己的ContextMenu。

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

然后在菜单项的点击事件中,我尝试获取ContextMenu所属的TreeNode。

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

问题是tm.SourceControl == null。我注意到TreeNode不是由Control衍生出来的。这就是为什么SourceControl属性是空的吗?如何获得适当的TreeNode对象?或者甚至是TreeView对象?

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

我不大明白你的问题。

当你在TreeView上点击时,你可以这样做来获得选中的Node和:

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)
        }
    }
}