我在我的VBA中使用了一个treeview控件,每个节点前面都有一个checkbox,当checkbox被打勾或者去除打勾,都会触发nodecheck,处理一定的事件。当我以较慢的速度点的时候,处理都正常的,但是我快速的对不同的checkbox进行点击的时候就出错了。主要是在nodecheck中我对一个全局数组进行修改,但是点快了数组的数据全错了。是不是treeview的nodecheck在事件处理上有同步问题啊

解决方案 »

  1.   

    没有吧,是你鼠标位置的问题。不过nodecheck和nodeclick很多时候是一样用的阿你还是修改一下你的程序吧
      

  2.   

    鼠标位置的问题是什么意思?
    我的程序主要是这样一个功能,当父节点勾中的时候,程序会自动去把该父节点的所有子节点也给勾中(包括孙子节点),如果子节点全部被勾中,也同样勾中父节点。由于程序的需要,我在判断该父节点的子是否已经被全部勾中,我是用了一个全局数组来纪录各个节点的子节点被勾中的数量,比如一个父节点有2个子节点,我就用了一个3个单元的数组,分别纪录3个节点的信息,第一个对应的是父节点的信息,如果一个子节点被勾中,则该子节点的父节点对应的数组单元就进行+1,如果被取消勾中,则父节点-1。当我点的慢点的时候,数组都是按照预期处理了NODECHECK事件,对数组进行了处理并且对节点的勾中状态进行设置。但是比如我快速的勾中两个子节点,好像NODECHECK就没有执行辆次,但是画面上两个节点都是处于被勾中的状态。这样造成的结果就是他们父节点对应的数组纪录的子节点被勾中的个数与画面上实际的子节点被勾中个数不一样了。所以我即使把所有子节点都勾上,程序也不能自动把父节点给勾上。
    写的比较多。不知道能不能理解。我整个程序都写好了,没想到出现这个问题,真的很头痛啊,这样的方式要是不行,我的程序差不多要全部重新设计了有没有能解决的啊。。谢谢了
      

  3.   

    啊。找到了。。果然是有BUG
    使用 TreeView 控件时 Checkboxes 属性设为 True 置于窗体并且用户通过复选框按下左鼠标按钮并再拖动鼠标远离复选框之前松开鼠标按钮, 切换复选框的状态, 但 NodeCheck 事件不发生。
    以下是该BUG的官方说明,里面有解决方法。
    http://support.microsoft.com/kb/221557/zh-cn