Domanda

In qualche codice VB6, ho un gestore per l'evento Collapse di TreeView:

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)

Viene chiamato ogni volta che un nodo nell'albero viene compresso, dall'utente o a livello di codice.A quanto pare, attraverso un'esecuzione indiretta, può accadere che questo gestore finisca per dire a un nodo di collassare, portando a una ricorsione infinita.

Posso pensare a diversi modi per scuoiare questo gatto, ma quello che mi sembra più semplice è dire a TreeView di non generare eventi per un certo periodo di tempo.Tuttavia, non riesco a trovare una semplice chiamata che mi consenta di farlo.Qualcuno lo ha fatto con successo o devo tenere traccia dello stato in qualche altro modo in modo da poter rispondere in modo appropriato quando si verificano eventi ricorsivi?

È stato utile?

Soluzione

Penso che, come molti eventi in VB, non possa essere disattivato.

Imposta semplicemente un flag booleano come hai suggerito.

Altri suggerimenti

@Phil - Sono giunto alla stessa conclusione.La mia implementazione di MyTree_Collapse ora assomiglia a questo (dove m_bHandlingCallback è una variabile membro):

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)
    If m_bHandlingCallback Then Exit Sub

    m_bHandlingCallback = True
    DoSomeStuff
    m_bHandlingCallback = False
End Sub

Un altro modo in VB6 è avere un'alternativa WithEvents riferimento al controllo:

Private WithEvents alt as TreeView

e dentro Form_Load:

Private Sub Form_Load()
Set alt = MyTree
End Sub

Ora alt riceverà tanti eventi come questo:

Private Sub alt_Collapse(ByVal Node as MSComCtlLib.Node)
Set alt = Nothing
'DoSomeStuff'
Set alt = MyTree
End Sub

Ma, durante il DoSomeStuff, gli eventi vengono sganciati, il che vale anche per tutti gli altri eventi Subè per alt senza la necessità di apportare modifiche invasive.

Dichiarerei la variabile flag come STATIC nel Sub.Ciò evita di rendere la variabile globale e le fa mantenere il suo valore tra una chiamata e l'altra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top