簡體   English   中英

防止TreeView觸發VB6中的事件?

[英]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的-這也適用於所有其他事件Subalt而無需它們進行侵入性更改。

我認為,就像VB中的許多事件一樣,無法將其關閉。

只需按照您的建議設置布爾值標志即可。

我將在Sub中將標志變量聲明為STATIC。 這樣可以避免使變量成為全局變量,並使其在兩次調用之間保持其值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM