Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅当用户单击树视图中的根节点时才显示上下文菜单?_C#_.net_Winforms_Treeview_Contextmenu - Fatal编程技术网

C# 如何仅当用户单击树视图中的根节点时才显示上下文菜单?

C# 如何仅当用户单击树视图中的根节点时才显示上下文菜单?,c#,.net,winforms,treeview,contextmenu,C#,.net,Winforms,Treeview,Contextmenu,我有一个树状视图和上下文菜单。我只想在右键单击根节点而不是子节点时显示关联菜单 这就是我目前所拥有的。即使我右键单击子节点,也会显示上下文菜单。如何更改此设置,使菜单仅在我右键单击根节点时显示?可能吗 if(e.Button == MouseButtons.Right) { // Select the clicked node treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); if(treeView1.Sel

我有一个树状视图和上下文菜单。我只想在右键单击根节点而不是子节点时显示关联菜单

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

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语句中添加一些逻辑,以验证用户单击的节点是否为根节点

但是我们如何确定它是否是根节点呢?嗯,仔细想想,我们可以将根节点定义为没有任何父节点的节点。因此,您可以简单地检查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中的&&运算符。

您还可以使用Level属性:


这就成功了。非常感谢你。
If e.Button = MouseButtons.Right Then
  ' Select the clicked node
  treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y)

  If treeView1.SelectedNode.Level = 0 Then
    myContextMenuStrip.Show(treeView1, e.Location)
  End If
End If