65.9K
CodeProject 正在变化。 阅读更多。
Home

TreeView 复选框双击的解决方法

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2014年6月10日

CPOL
viewsIcon

12461

这个技巧用于修复复选框双击中的一个漏洞。

引言

这个技巧用于解决此链接中的问题:

背景

当我尝试将 VB6 treeview 项目迁移到 VB.NET 时,我遇到了上述问题,以及双击展开和折叠也存在问题。为了解决这些问题,我编写了以下代码。

Using the Code

这段代码已经由 SwissMatt 发布。我只是实现了一些额外的功能,以便在单击 checkbox 时启用 Treeview 中的 doubleclick 事件。

Public Class MyTreeView
    Inherits TreeView

    Protected Overrides Sub WndProc(ByRef m As Message)
        ' Suppress WM_LBUTTONDBLCLK
        If (m.Msg = &H203) Then
            Dim Hitpoint As Point = New Point(CInt(m.LParam))
            Dim tvhti As TreeViewHitTestInfo = HitTest(Hitpoint)
            If tvhti IsNot Nothing AndAlso tvhti.Location = TreeViewHitTestLocations.StateImage Then
                Me.SelectedNode = tvhti.Node
                Dim tvs As New TreeNodeMouseClickEventArgs_
                (Me.SelectedNode, Windows.Forms.MouseButtons.Left, 2, Hitpoint.X, Hitpoint.Y)
                Dim mvs As New MouseEventArgs(Windows.Forms.MouseButtons.Left, 2, Hitpoint.X, Hitpoint.Y, 0)
                OnNodeMouseDoubleClick(tvs)
                OnMouseDoubleClick(mvs)
                OnDoubleClick(New EventArgs)
                If tvhti.Node.IsExpanded Then
                    SendKeys.Send("{LEFT}")
                Else
                    SendKeys.Send("{RIGHT}")
                End If
                m.Result = IntPtr.Zero
                Return
            Else
                MyBase.WndProc(m)
            End If
        Else
            MyBase.WndProc(m)
        End If
    End Sub
End Class

关注点

TreeView Checkbox 上实现双击要困难得多。此外,展开和折叠的行为是我的想法。

© . All rights reserved.