[英]Prevent a TreeView from firing events in VB6?
在某些VB6代碼中,我有一個TreeView的Collapse事件處理程序:
Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)
每當樹中的某個節點折疊時(無論是由用戶還是以編程方式),都會調用此方法。 事實證明,通過某種回旋執行,該處理程序可能會結束,告訴節點崩潰,從而導致無限遞歸。
我可以想到多種方法給這只貓換皮,但是對我來說,最簡單的方法是告訴TreeView在一段時間內不要引發事件。 不過,我找不到一個簡單的電話可以讓我這樣做。 有沒有人成功完成此操作,還是我需要以其他方式跟蹤狀態,以便在出現遞歸事件時可以做出適當響應?
@Phil-我得出了相同的結論。 我對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
VB6中的另一種方法是具有對控件的備用WithEvents
引用:
Private WithEvents alt as TreeView
並在Form_Load
:
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
期間,事件是未DoSomeStuff
的-這也適用於所有其他事件Sub
的alt
而無需它們進行侵入性更改。
我認為,就像VB中的許多事件一樣,無法將其關閉。
只需按照您的建議設置布爾值標志即可。
我將在Sub中將標志變量聲明為STATIC。 這樣可以避免使變量成為全局變量,並使其在兩次調用之間保持其值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.