c# - 如何获取从中调用上下文菜单的 TreeNode?

标签 c# winforms contextmenu treenode

我有一个带有一堆 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/

相关文章:

c# - 为什么 Visual C# express 2010 变得缓慢且不稳定,任务管理器中的句柄变得过高?

c# - NSUrl 请求在 Xamarin Today Widget 中不起作用

c# - 在 c#.net winforms 中保存变量的值

Winforms-如何使MessageBox显示在MainForm的中心?

javascript - jQuery 中的上下文菜单项

c# - 手动调用 ModelState 验证

c# - 删除动态控件 : Clear is working but not remove

c# - 在 Datagridview 中使用向下箭头选择组合框项目

objective-c - 在基于 View 的 NSTableView 上自定义右键单击突出显示

jquery - 如何为我的 jqGrid 设置 contextMenu?