c# - 如何仅当用户单击 TreeView 中的根节点时才显示上下文菜单?

标签 c# .net winforms treeview contextmenu

我有一个 TreeView 和一个上下文菜单。我只想在右键单击根节点而不是子节点时显示上下文菜单。

这就是我到目前为止所拥有的。即使我右键单击子节点,也会显示上下文菜单。如何更改此设置,以便仅在右键单击根节点时才显示菜单?可能吗?

if(e.Button == MouseButtons.Right)
{
    // Select the clicked node
    treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

    if(treeView1.SelectedNode != null)
    {
        myContextMenuStrip.Show(treeView1, e.Location)
    }
}

最佳答案

是的,这是可能的,但您需要在 if 语句中添加一些逻辑,以验证用户单击的节点是否为根节点。

但是我们如何知道它是否是根节点呢?好吧,仔细想想,我们可以将根节点定义为没有任何父节点的节点。所以你可以简单地检查Parent property TreeNode 并确保其为 null

修改您的代码,使其看起来像这样:

if (e.Button == MouseButtons.Right)
{
    // Select the clicked node
    treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

    if (treeView1.SelectedNode != null && treeView.SelectedNode.Parent == null)
    {
        myContextMenuStrip.Show(treeView1, e.Location)
    }
}

您希望保留节点本身不为 null 的检查,因为您不希望在他们尚未单击某个节点时显示上下文菜单节点,但您需要添加对父节点的检查,因为这会告诉您它是否是根节点。以编程方式指示的方式是使用逻辑 AND,即 C# 中的 && 运算符。

关于c# - 如何仅当用户单击 TreeView 中的根节点时才显示上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5692779/

相关文章:

c# - 如何在无人干预的情况下自动连续轮询FTP服务器

c# - WPF:如何实现通用窗口?

c# - 如果客户端验证失败显示消息?

c# - IEnumerable<T> 线程安全?

c# - Crystal 报表条形码 128 转换器

c# - 无法让自己的主机在 NServiceBus 上工作

.net - 为什么“添加引用”中未列出 System.Web.Mvc?

c# - 在 .NET 中实现枚举数组到字符串数组类型转换器

c# - 当我知道行的 id 时,如何使用单元格的值?

c# - 无法向窗体添加控件