我正在寻找一种在VB.net中实现TreeView的好方法,其中contextMenuStrip是基于表单中不同对象的状态而变化的。
具体来说,在下面的'TreeView'中,当对象状态= 1时,在项目上显示contextMenuStrip1,当state = 2时,在项目上显示contextMenuStrip2。
到目前为止,我一直在实现上面的代码之类的上下文菜单,并在创建节点时添加了contextMenuStrip。
Dim Context1 As ContextMenuStrip = New ContextMenuStrip
AddHandler Context1.Items.Add("Delete Item").Click, AddressOf DeleteSub
------------------
| + TreeNode1
| + TreeNode2
| + TreeNode3
| |- Item1
| |- Item2
| |- Item3
------------------
答案 0 :(得分:2)
我不知道这个对象决定了要使用的菜单,所以我使用了CheckBox
。如果相关对象是这样的,您可以在状态更改时重新分配ContextMenuStrip
- 在这种情况下,使用CheckChange
事件:
Private Sub chkShow2_CheckedChanged(sender...
If chkShow2.Checked Then
tv1.ContextMenuStrip = cms2
Else
tv1.ContextMenuStrip = cms1
End If
End Sub
如果状态直到需要菜单时才知道,请在MouseDown
的{{1}}事件中重新/分配菜单:
TreeView
您也可以手动显示菜单,而不是将其分配给控件:
If e.Button = Windows.Forms.MouseButtons.Right Then
If chkShow2.Checked Then
tv1.ContextMenuStrip = cms2
Else
tv1.ContextMenuStrip = cms1
End If
End If
Private Sub tv1_MouseDown(sender ...
If e.Button = Windows.Forms.MouseButtons.Right Then
If chkShow2.Checked Then
cms2.Show(tv1, e.Location)
Else
cms1.Show(tv1, e.Location)
End If
End If
End Sub
是。您可以在显示之前添加/更改或删除菜单项。例如,如果您有节点Would it also be possible to append a number to the contextMenuStrip item?
,并且想要实现{A, B, C}
项,则当它打开并且节点B中的项时,禁用该目标。