0

我一直在使用 NodeMouseClick 事件来处理我的 TreeNodes 上的左键和右键单击。现在我也想为中间点击添加一个效果,但是 NodeMouseClick 事件似乎不会在中间点击时触发。这是一个已知的错误,还是应该可以正常工作而我只是做错了什么?如果它是一个错误(或只是打算以这种方式运行),我如何在 TreeNode 上单击鼠标中键对该节点执行特定操作?

这是我的一些代码:

Private Sub TreeView1_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
    If e.Button = Windows.Forms.MouseButtons.Left Then
        Call nodeLeft(e.Node)
    ElseIf e.Button = Windows.Forms.MouseButtons.Middle Then
        Call nodeMiddle(e.Node)
    ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
        Call nodeRight(e.Node)
    End If
End Sub
4

1 回答 1

1

你可以试试这个版本:

Public Class MyTreeView
  Inherits TreeView

  Private Const WM_MBUTTONDOWN As Integer = &H207

  Protected Overrides Sub WndProc(ByRef m As Message)
    MyBase.WndProc(m)
    If m.Msg = WM_MBUTTONDOWN Then
      Dim p As Point = Me.PointToClient(MousePosition)
      Dim mouseNode As TreeNode = Me.GetNodeAt(p)
      If mouseNode IsNot Nothing Then
        Me.OnNodeMouseClick(New TreeNodeMouseClickEventArgs(mouseNode, MouseButtons.Middle, 1, p.X, p.Y))
      End If
    End If
  End Sub
End Class

它将触发 NodeMouseClick 事件,并为 Button 属性设置中间值。但它不会选择节点。为此,请Me.SelectedNode = mouseNode在 OnNodeMouseClick 调用上方添加该行。

于 2013-06-17T23:03:24.497 回答