我有一个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)
}
}
答案 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