每次右键单击vb.net时的上下文菜单
我试图在vb.net中将上下文菜单添加到树状视图中,但没有获得所需的行为。当我在树状视图中右键单击时,我可以根据用户单击的位置,使用不同的选项显示上下文菜单,但是如果用户单击树状视图中的其他位置,并且上下文菜单已经打开,则上下文菜单将被清除,并且不会重新出现在新单击的位置(很像在web浏览器中多次单击鼠标右键) 这就是我到目前为止所做的:每次右键单击vb.net时的上下文菜单,vb.net,treeview,behavior,right-click,Vb.net,Treeview,Behavior,Right Click,我试图在vb.net中将上下文菜单添加到树状视图中,但没有获得所需的行为。当我在树状视图中右键单击时,我可以根据用户单击的位置,使用不同的选项显示上下文菜单,但是如果用户单击树状视图中的其他位置,并且上下文菜单已经打开,则上下文菜单将被清除,并且不会重新出现在新单击的位置(很像在web浏览器中多次单击鼠标右键) 这就是我到目前为止所做的: Private Sub treeviewMain_MouseDown(sender As Object, e As System.Windows.Forms.
Private Sub treeviewMain_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles treeviewMain.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
'Determine which tree structure is loaded in tree view.
If (treeviewMain.Nodes.Item(0).Name = "MainNode") Then
Test(sender, e)
Else
OtherTest(sender, e)
End If
End If
End Sub
Private Sub Test(sender As Object, e As System.Windows.Forms.MouseEventArgs)
Dim Context As ContextMenu = New ContextMenu
Dim NodeClicked As TreeNode
NodeClicked = Me.tvwMain.GetNodeAt(e.X, e.Y)
If NodeClicked Is Nothing Then
Context.MenuItems.Add("New Item")
Context.Show(treeviewMain, e.Location)
ElseIf NodeClicked.Name = "MainNode" Then
tvwMain.SelectedNode = NodeClicked
Context.MenuItems.Add("New Item")
Context.Show(treeviewMain, e.Location)
ElseIf NodeClicked.Level = 0 And NodeClicked.Name <> "MainNode" Then
tvwMain.SelectedNode = NodeClicked
Context.MenuItems.Add("Rename")
Context.MenuItems.Add("Delete")
Context.MenuItems.Add("-")
Context.MenuItems.Add("New")
Context.Show(treeviewMain, e.Location)
ElseIf NodeClicked.Level = 1 Then
tvwMain.SelectedNode = NodeClicked
Context.MenuItems.Add("Edit")
Context.MenuItems.Add("Copy")
Context.MenuItems.Add("Delete")
Context.Show(treeviewMain, e.Location)
End If
End Sub
Private子树eviewmain\u MouseDown(发送者作为对象,e作为System.Windows.Forms.MouseEventArgs)处理树eviewmain.MouseDown
如果e.Button=Windows.Forms.MouseButtons.Right,则
'确定树视图中加载的树结构。
如果(treeviewMain.Nodes.Item(0).Name=“MainNode”),则
测试(发送者,e)
其他的
其他测试(发送方,e)
如果结束
如果结束
端接头
私有子测试(发送方作为对象,e作为System.Windows.Forms.MouseEventArgs)
将上下文设置为上下文菜单=新建上下文菜单
朦胧的点点滴滴像树状物
NodeClicked=Me.tvwMain.GetNodeAt(e.X,e.Y)
如果NodeClicked算不了什么
Context.MenuItems.Add(“新项”)
Context.Show(treeviewMain,e.Location)
ElseIf NodeClicked.Name=“MainNode”然后
tvwMain.SelectedNode=NodeClicked
Context.MenuItems.Add(“新项”)
Context.Show(treeviewMain,e.Location)
ElseIf NodeClicked.Level=0且NodeClicked.Name为“MainNode”
tvwMain.SelectedNode=NodeClicked
Context.MenuItems.Add(“重命名”)
Context.MenuItems.Add(“删除”)
Context.MenuItems.Add(“-”)
Context.MenuItems.Add(“新建”)
Context.Show(treeviewMain,e.Location)
ElseIf NodeClicked.Level=1然后
tvwMain.SelectedNode=NodeClicked
Context.MenuItems.Add(“编辑”)
Context.MenuItems.Add(“复制”)
Context.MenuItems.Add(“删除”)
Context.Show(treeviewMain,e.Location)
如果结束
端接头
在vb.net中是否存在这种行为?我认为您不需要在
MouseDown
事件中编写任何代码。您只需要在填充TreeView
时为每个节点正确设置ContextMenu
如果我是你,我会做这样的事
ContextMenuStrip1.Items.Add("New Item")
ContextMenuStrip2.Items.Add("Rename")
ContextMenuStrip2.Items.Add("Delete")
ContextMenuStrip2.Items.Add("-")
ContextMenuStrip2.Items.Add("New")
ContextMenuStrip3.Items.Add("Edit")
ContextMenuStrip3.Items.Add("Copy")
ContextMenuStrip3.Items.Add("Delete")
Dim mainNode As New TreeNode("Main Node")
mainNode.Name = "MainNode"
mainNode.ContextMenuStrip = ContextMenuStrip1
Dim level0Node As New TreeNode("Other Level 0 Node")
level0Node.ContextMenuStrip = ContextMenuStrip2
Dim level1NodeOfMain As New TreeNode("Level 1 Node Under Main Node")
level1NodeOfMain.ContextMenuStrip = ContextMenuStrip3
Dim level1NodeOfOther As New TreeNode("Level 1 Node Under Other Level 0")
level1NodeOfOther.ContextMenuStrip = ContextMenuStrip3
mainNode.Nodes.Add(level1NodeOfMain)
level0Node.Nodes.Add(level1NodeOfOther)
treeviewMain.Nodes.Add(mainNode)
treeviewMain.Nodes.Add(level0Node)
treeviewMain.ContextMenuStrip = ContextMenuStrip1 'you can remove this line if you don't want to show ContextMenu if user clicks not on the Nodes
我想我仍然需要在鼠标按下事件中使用代码来更改右键单击时节点的焦点。是否需要这样做?
treeviewMain.Nodes.Add(“CategoryID=“&row.Item(0).ToString,row.Item(1).ToString).ContextMenuStrip=test5
。我从作为datatable引入的表中填充0级和1级节点。是的,它可以工作。比方说,如果选择了主节点,然后右键单击其他0级节点,则其他0级节点将获得焦点并被选中,ContextMenu将显示treeviewMain.nodes.Add(“CategoryID=”和row.Item(0).ToString,row.Item(1).ToString.ContextMenuStrip=test5
不正确!您必须先创建节点对象,将ContextMenu设置为该对象,然后添加到树视图中。将tmpNode设置为新树节点(“CategoryID=”&row.Item(0).ToString,row.Item(1).ToString())
tmpNode.ContextMenuStrip=test5
treeviewMain.Nodes.add(tmpNode)