2008-08-18 151 views
1

在一些VB6代碼,我有一個TreeView的崩潰事件的處理程序:防止在VB6中觸發事件的TreeView?

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node) 

每當樹中的一個節點是摺疊這就是所謂的,無論是由用戶或編程。事實證明,通過一些迂迴的執行,可能會發生這樣的事情:處理程序將結束告訴節點崩潰,導致無限遞歸。

我可以想出多種方法來爲這隻貓蒙皮,但對我來說最簡單的是告訴TreeView不要在一段時間內引發事件。不過,我找不到一個簡單的電話來讓我這樣做。有沒有人成功地完成了這項工作,還是需要以其他方式跟蹤狀態,以便在遞歸事件出現時能夠適當地作出響應?

回答

2

我認爲就像VB中的許多事件一樣,它不能被關閉。

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

2

@菲爾 - 我得出了同樣的結論。我的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 
0

我想聲明標誌變量爲靜態在Sub。這樣可以避免使全局變量變爲全局變量,並保持其在調用之間的值。

+2

是VB中的一個函數靜態變量,在類的所有實例中共享,就像在C++中一樣?我使用成員數據(不是全局數據),以便設置標誌不會影響我班的所有實例 - 只是我關心的一個實例。 – 2008-09-29 12:04:01

2

在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,而不需要他們進行侵入性更改。

相關問題