avrei bisogno una delucidazione su VB6: nel mio programma l'utente può creare un certo numero di form, che sono organizzati come array:
- Codice: Seleziona tutto
Public MyForms() as TemplateForm ' TemplateForm è un Form precedentemente creato
L'utente può anche chiudere uno o più di questi form, che vengono eliminati (evento Unload)
L'array viene gestito in modo dinamico: se l'utente crea un form, e MyForms non ha nessuna posizione libera (lasciata da un form precedentemente cancellato), "cresce" per poterlo ospitare (redim Preserve).
Ognuno dei form contiene dei controlli Timer che vorrei disabilitare alla chiusura del programma, ma solo se il rispettivo form non è stato già chiuso (l'evento associato a questi timer lancia procedure che interferiscono con la corretta sequenza d'uscita).
Per fare ciò, uso questo codice:
- Codice: Seleziona tutto
Private Sub Form_Unload(CANCEL As Integer)
(..)
For k = 0 To UBound(MyForms)
If MyForms(k).hwnd > 0 Then
For Each ctrl In MyForms(k).Controls
If TypeOf ctrl Is Timer Then
ctrl.Enabled = False
End If
Next
End If
Next
(...)
End Sub
Il mio dubbio riguarda il controllo sugli handle dei form: in debug mode posso osservare che anche se un form è stato scaricato (la proprietà .hwnd risulta essere "Variabile non definita passando il cursore del mouse sul nome), ma la routine "entra" comunque nel secondo ciclo For-Next e procede a disabilitare ugualmente tutti i timer.
Non è che la semplice interrogazione della proprietà .hwnd causi il (ri)caricamento del form in questione? Esiste una procedura più corretta?
In realtà non è un grande problema se i form vengono ricaricati, dal momento che programma deve comunque terminare; Volevo solo risparmiare qualche milliecondo in fase d'uscita.
Si accettano suggerimenti e... ovviamente Grazie in anticipo.
MAx