根据不同对象的状态更改contextMenuStrip

时间:2016-02-13 00:40:13

标签: vb.net contextmenustrip

我正在寻找一种在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
------------------

1 个答案:

答案 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中的项时,禁用该目标。