.net 树状视图节点上的动态上下文菜单

.net 树状视图节点上的动态上下文菜单,.net,winforms,treeview,contextmenu,right-click,.net,Winforms,Treeview,Contextmenu,Right Click,副本: 我在树视图上有一个上下文菜单,当用户右键单击时,它应该根据当前右键单击的节点的标记对象进行更改 目前,我正在更新after_select事件中的上下文菜单,但是当用户右键单击另一个节点而未选择它时,这将不起作用 如何检测右键单击的节点并更改上下文菜单?还是我做错了?您可以使用MouseDown事件和HitTest方法来确定单击了哪个节点。很遗憾,您没有找到正确的节点。要么我对搜索查询很糟糕,要么搜索很糟糕。反正更新了。 Private Sub tvTables_MouseDown(ByV

副本:

我在树视图上有一个上下文菜单,当用户右键单击时,它应该根据当前右键单击的节点的标记对象进行更改

目前,我正在更新after_select事件中的上下文菜单,但是当用户右键单击另一个节点而未选择它时,这将不起作用


如何检测右键单击的节点并更改上下文菜单?还是我做错了?

您可以使用MouseDown事件和HitTest方法来确定单击了哪个节点。

很遗憾,您没有找到正确的节点。要么我对搜索查询很糟糕,要么搜索很糟糕。反正更新了。
Private Sub tvTables_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tvTables.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Right Then
        Dim M As New ContextMenuStrip
        Dim HTI As TreeViewHitTestInfo = tvTables.HitTest(e.X, e.Y)
        If HTI.Node.Level = 0 Then
            M = T1Menu
        ElseIf HTI.Node.Level = 1 Then
            M = T2Menu
        ElseIf HTI.Node.Level = 2 Then
            M = T3Menu
        End If
        tvTables.ContextMenuStrip = M
        tvTables.ContextMenuStrip.Show()
    End If
End Sub