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

时间:2011-04-17 09:43:16

标签: c# .net winforms treeview contextmenu

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

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

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

3 个答案:

答案 0 :(得分:5)

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

但我们如何判断它是否是根节点?好吧,通过思考,我们可以将根节点定义为没有任何父节点的根节点。因此,您只需查看TreeNode的{​​{3}},并确保其为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#中的&&运算符。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您还可以使用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