【问题标题】:How do I get the TreeNode that a context menu is called from?如何获取从中调用上下文菜单的 TreeNode?
【发布时间】:2011-12-16 14:15:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: c# winforms contextmenu treenode


【解决方案1】:

我不确定你的问题。

当您点击 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)
        }
    }
}

【讨论】:

  • 我没有使用 TreeView 点击事件,我使用的是 MenuItem 点击事件。但这有助于找出我的解决方案。 Treeview 始终可用,并且只有一个。所以我只是直接访问它,而不是尝试从事件处理程序参数中获取它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多