我有一个带有一堆 TreeNode 的 TreeView 控件。每个节点 ContextMenu 根据其状态具有不同的 MenuItems。所以我目前正在为每个 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 对象?
最佳答案
我不确定是否理解您的问题。
当您点击 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)
}
}
}
关于c# - 如何获取从中调用上下文菜单的 TreeNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535424/