我有一堆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对象?
答案 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)
}
}
}