如何在用户单击TreeView中的根节点时才显示上下文菜单?

本文关键字:显示 上下文 菜单 根节点 用户 单击 TreeView | 更新日期: 2023-09-27 17:50:35

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

这是我目前所知道的。这显示了上下文菜单,即使我右键单击子节点。如何更改这一点,以便仅在右键单击根节点时才显示菜单?这可能吗?

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)
    }
}

如何在用户单击TreeView中的根节点时才显示上下文菜单?

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

但是我们怎么知道它是不是根节点呢?仔细想想,我们可以把根节点定义为没有父节点的节点。因此,您可以简单地检查TreeNodeParent属性,并确保它是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的检查,因为您不想在他们没有单击节点时显示上下文菜单,但是您需要添加父节点的检查,因为这告诉您它是否是根节点。你在编程上指示的方式是使用逻辑与,这是c#中的&&运算符。

检查您单击的节点是否为根节点,而不是检查它是否为null

您也可以使用Level属性:

http://msdn.microsoft.com/EN-US/library/386b25wy (v = VS.110 d = hv.2) . aspx

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