防止在VB6中触发事件的TreeView?
问题描述:
在一些VB6代码,我有一个TreeView的崩溃事件的处理程序:防止在VB6中触发事件的TreeView?
Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)
每当树中的一个节点是折叠这就是所谓的,无论是由用户或编程。事实证明,通过一些迂回的执行,可能会发生这样的事情:处理程序将结束告诉节点崩溃,导致无限递归。
我可以想出多种方法来为这只猫蒙皮,但对我来说最简单的是告诉TreeView不要在一段时间内引发事件。不过,我找不到一个简单的电话来让我这样做。有没有人成功地完成了这项工作,还是需要以其他方式跟踪状态,以便在递归事件出现时能够适当地作出响应?
答
我认为就像VB中的许多事件一样,它不能被关闭。
只需按照您的建议设置布尔标志即可。
答
@菲尔 - 我得出了同样的结论。我的MyTree_Collapse
执行现在看起来是这样的(其中m_bHandlingCallback
是一个成员变量):
Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)
If m_bHandlingCallback Then Exit Sub
m_bHandlingCallback = True
DoSomeStuff
m_bHandlingCallback = False
End Sub
答
我想声明标志变量为静态在Sub。这样可以避免使全局变量变为全局变量,并保持其在调用之间的值。
答
在VB6的另一方式是具有一个备用WithEvents
参考控制:
Private WithEvents alt as TreeView
和在:
Private Sub Form_Load()
Set alt = MyTree
End Sub
现在alt
将接收大量的事件这样的:
Private Sub alt_Collapse(ByVal Node as MSComCtlLib.Node)
Set alt = Nothing
'DoSomeStuff'
Set alt = MyTree
End Sub
但是,在DoSomeStuff
,事件被解除挂钩 - 这也适用于所有其他事件Sub
s的alt
,而不需要他们进行侵入性更改。
是VB中的一个函数静态变量,在类的所有实例中共享,就像在C++中一样?我使用成员数据(不是全局数据),以便设置标志不会影响我班的所有实例 - 只是我关心的一个实例。 – 2008-09-29 12:04:01