如何获得调用上下文菜单的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对象?
我不大明白你的问题。
当你在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)
}
}
}