You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中如何获取右键菜单项所属的TreeNode?

在WinForms右键菜单点击事件中获取所属TreeNode的几种方法

方法一:通过ContextMenuStrip的Tag存储TreeNode

修改TreDevices_AfterLabelEdit方法,将当前节点存入菜单的Tag属性:

private async void TreDevices_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    var contextMenu = new ContextMenuStrip();
    e.Node.ContextMenuStrip = contextMenu;
    // 将当前TreeNode绑定到菜单的Tag
    contextMenu.Tag = e.Node;
    
    var itemEntrada = contextMenu.Items.Add("Entrada");
    itemEntrada.Click += InOutItem_Click;
}

在点击事件中直接从Tag取出节点:

private async void InOutItem_Click(object? sender, EventArgs e)
{
    if (sender is ToolStripMenuItem item && item.Owner is ContextMenuStrip menu)
    {
        // 从Tag中获取目标TreeNode
        if (menu.Tag is TreeNode targetNode)
        {
            // 这里可以直接操作targetNode
        }
    }
}

方法二:利用TreeView的SelectedNode属性

右键点击TreeNode时,TreeView的SelectedNode会自动切换为被点击的节点,因此可以通过菜单的SourceControl获取树控件,再取SelectedNode:

private async void InOutItem_Click(object? sender, EventArgs e)
{
    if (sender is ToolStripMenuItem item && item.Owner is ContextMenuStrip menu)
    {
        if (menu.SourceControl is TreeView treDevices)
        {
            TreeNode? targetNode = treDevices.SelectedNode;
            if (targetNode != null)
            {
                // 操作targetNode
            }
        }
    }
}

注意:如果用户右键点击树控件空白区域,SelectedNode可能为空,但你的场景是给TreeNode绑定菜单,所以该情况不会出现。

方法三:通过闭包捕获TreeNode(推荐)

在绑定点击事件时,直接用闭包捕获当前的TreeNode,避免额外的类型转换或依赖控件属性:

private async void TreDevices_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    TreeNode currentNode = e.Node;
    currentNode.ContextMenuStrip = new ContextMenuStrip();
    
    var itemEntrada = currentNode.ContextMenuStrip.Items.Add("Entrada");
    // 绑定事件时通过闭包传入currentNode
    itemEntrada.Click += (s, args) => OnInOutItemClicked(currentNode, s, args);
}

// 自定义事件处理方法,直接接收TreeNode参数
private async void OnInOutItemClicked(TreeNode targetNode, object? sender, EventArgs e)
{
    // 直接使用targetNode,无需额外获取
}

内容的提问来源于stack exchange,提问作者jstuardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:50:18