VB TreeView Bug...

本文介绍了解决VisualBasic6.0中TreeView控件的两个常见问题:设置节点的Checked属性无效以及节点拖拽时出现的选择错误。通过调整绑定方式及自定义鼠标事件处理实现了预期效果。

在Visual Basic 6.0 中,有那么一个bug ,遇上了也郁闷。

微软官方描述:http://support.microsoft.com/kb/221557

简而言之,当你设置TreeView中Node 的Checked 属性为True,或者在按下左键拖拉到另一个Node时,

并不发生NodeClick事件。

解决方法,自然可以参考官方的做法,本人也试过,只是没有并没有做自己想要的效果,所以自己写

一个解决方案。

我遇上的问题有两个。

1.node.Checked = True,却没有看到如期效果,CheckBox的勾一样没有勾上。

解决方法:因我的TreeView控件,有绑定ImageList控件,查找一些资料,不能在设计时进行绑定,

于是多加了一句代码,TreeView1.ImageList = ImageList1,把绑定延迟到运行时

问题解决了,具体什么理由,不详。

2.在一个node的Checkbox 上按左键,拖动到另一node,两个起始的node都会被选定。

而我想要的效果是:当满足条件时才勾选,其他情况不勾选。

勾选动作可分为三个事件,mouseDown,NodeCheck,mouseUp,于是就有了如下:

Priavte nodDown As Node

Pivate nodCheck As Node

'mouseDown Event

Private Sub tvwCtrl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    If (Button = vbLeftButton) then   

        If Not condition Then
            Set nodDown = tvwCtrl.HitTest(X, Y)
            If nodDown Is Nothing Then Exit Sub

        End if
    End If
   
End Sub

Private Sub tvwCtrl_NodeCheck(ByVal Node As MSComctlLib.Node)
   
        If condition Then
           '''do something
        Else
            Set nodCheck = Node
        End If
    
End Sub


Private Sub tvwCtrl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

  If (Button = vbLeftButton) Then
        If Not condition Then
            If nodCheck Is Nothing Then
            Else
                If nodCheck.key <> nodDown.key Then
                    nodDown.Checked = Not nodDown.Checked
                Else
                    nodCheck.Checked = Not nodCheck.Checked
                End If
                Set nodCheck = Nothing
                
            End If '
        End If 'buttons
        Set nodDown = Nothing

  End if   
End Sub

综上,自己纠结了好半天,书以记之。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值