Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 根据不同对象的状态更改contextMenuStrip_Vb.net_Contextmenustrip - Fatal编程技术网

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

Vb.net 根据不同对象的状态更改contextMenuStrip,vb.net,contextmenustrip,Vb.net,Contextmenustrip,我正在寻找一种在VB.net中实现TreeView的好方法,它的contextMenuStrip根据表单中不同对象的状态而变化 具体来说,在下面的“树视图”中,当对象状态=1时,在项目上显示contextMenuStrip1,当状态=2时,在项目上显示contextMenuStrip2 到目前为止,我已经实现了如下代码所示的上下文菜单,并在创建节点时添加了contextMenuStrip Dim Context1 As ContextMenuStrip = New ContextMenuStri

我正在寻找一种在VB.net中实现TreeView的好方法,它的contextMenuStrip根据表单中不同对象的状态而变化

具体来说,在下面的“树视图”中,当对象状态=1时,在项目上显示contextMenuStrip1,当状态=2时,在项目上显示contextMenuStrip2

到目前为止,我已经实现了如下代码所示的上下文菜单,并在创建节点时添加了contextMenuStrip

Dim Context1 As ContextMenuStrip = New ContextMenuStrip
AddHandler Context1.Items.Add("Delete Item").Click, AddressOf DeleteSub


------------------
| + TreeNode1
| + TreeNode2
| + TreeNode3
|   |- Item1
|   |- Item2
|   |- Item3
------------------

我不知道这个对象是什么,它决定了要使用的菜单,所以我使用了一个
复选框。如果所讨论的对象类似于此,则可以在状态更改时重新分配
ContextMenuStrip
——在本例中,使用
CheckChange
事件:

Private Sub chkShow2_CheckedChanged(sender...
    If chkShow2.Checked Then
        tv1.ContextMenuStrip = cms2
    Else
        tv1.ContextMenuStrip = cms1
    End If
End Sub
如果直到需要菜单时才知道该状态,请在
鼠标向下
事件中为
树视图
重新分配菜单:

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

是否也可以向contextMenuStrip项追加一个数字?


对。您可以在菜单项显示之前添加/更改或删除菜单项。例如,如果您有节点
{A,B,C}
,并且想要实现一个
移动到…
项,当它在节点B中打开时,禁用该目标

您可以在菜单打开时禁用某些内容,具体取决于它所覆盖的内容。是否还可以在contextMenuStrip项中添加一个数字?假设我选择了dataGridView的第13行,则将“13”附加到字符串。“删除项目13”,例如,是的,我有一个CMS填写空白类型的东西-你需要设置整个文本,虽然以避免“删除项目13,15,45,47,1,13……”什么是对象在代码>对象状态= 1 < /代码>?如果你把其中的两个放在表单上,你可以很容易地根据任何情况显示其中一个。您还可以让事件处理程序提前全部连接。TreeView中的项目将是用户可以添加到dataGridView的“步骤”。每个步骤都将具有可在dataGridView中配置的属性。dataGridView中的位置、位置、最后一步等将决定上下文菜单,插入、追加、覆盖等等。我将避免使用完全动态的菜单。例如,使用所有这些条目(追加、插入、替换、上移、下移等)构建它,然后只隐藏或禁用不适用的条目。我正在查看动态菜单,因为这些函数需要在用户当前选择的dataGridView中的行上运行。上下文菜单应该显示他们应用该操作的“步骤”编号。但是,改变菜单的可见性并将行号附加到末尾是有意义的。所谓完全动态,我指的是频繁添加和删除项目。如果你需要它,你也需要它,但我会尝试设置一组菜单项,这些菜单项在不适用时被禁用或隐藏。显示“步骤编号”只是更改文本,不需要删除或添加项目。