Pregunta

En algún código VB6, tengo un controlador para el evento de colapso de TreeView:

Private Sub MyTree_Collapse(ByVal Node as MSComCtlLib.Node)

Esto se llama cada vez que se colapsa un nodo en el árbol, ya sea por parte del usuario o mediante programación.Resulta que, a través de alguna ejecución indirecta, puede suceder que este controlador termine diciéndole a un nodo que colapse, lo que lleva a una recursividad infinita.

Puedo pensar en varias formas de despellejar a este gato, pero lo que me parece más simple es decirle a TreeView que no genere eventos durante un período de tiempo.Sin embargo, no puedo encontrar una llamada simple que me permita hacer esto.¿Alguien ha hecho esto con éxito o necesito realizar un seguimiento del estado de alguna otra manera para poder responder adecuadamente cuando se presenten eventos recursivos?

¿Fue útil?

Solución

Creo que, como muchos eventos en VB, no se puede desactivar.

Simplemente configure una bandera booleana como sugirió.

Otros consejos

@Phil: llegué a la misma conclusión.Mi implementación de MyTree_Collapse ahora se parece a esto (donde m_bHandlingCallback es una variable miembro):

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

    m_bHandlingCallback = True
    DoSomeStuff
    m_bHandlingCallback = False
End Sub

Otra forma en VB6 es tener una alternativa WithEvents referencia al control:

Private WithEvents alt as TreeView

y en Form_Load:

Private Sub Form_Load()
Set alt = MyTree
End Sub

Ahora alt Recibirá muchos eventos como este:

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

Pero, durante el DoSomeStuff, los eventos se desenganchan, lo que también se aplica a todos los demás eventos. Subs para alt sin necesidad de que tengan cambios intrusivos.

Declararía la variable de bandera como ESTÁTICA en Sub.Esto evita que la variable sea global y hace que mantenga su valor entre llamadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top