Newsgroup: it.comp.lang.visual-basic
Titolo: Non riesco a chiudere il form 2

Scusate se riposto il messaggio, ma ho aggiunto un'appendice.
Questo č il post precedente :
Mi serve davvero una mano per chiudere questo form ..... dunque :
Alla partenza del mio form devo chiamare una funzione "invia"
Private Sub Form_Load()
    Me.Visible = True
    Check1.Value = 0
    Check2.Value = 0
    a = SetAsParent(MDIForm1.hwnd, me.hwnd)
    'Resizer.SizeFormToScreen 30
    Call Invia
End Sub
che manda dei messaggi su una seriale e aspetta le risposte. Solo quando ha
ricevuto queste risposte puň rimandare di nuovo questi messaggi, per cui non
posso usare dei timer, quindi ho pensato di inserire l'invio di questi
messaggi all'interno di un Do ... Loop e di mettere un checkbox (check1)
invisibile sul form per dirgli quando finire di mandare i messaggi
Private Sub Invia()
    Dim i As Integer
    Do
        DoEvents
        Call Bat(StBat)
        Call Mem(StMem)
    Loop Until Check1.Value = 1
    Check2.Value = 1
End Sub
Questo perchč, nel caso volessi chiudere il form, dovrei aspettare comunque
la risposta a tutti i messaggi inviati. Ho pensato allora di inserire un
secondo checkbox invisibilen (chack2) per sapere quando posso effettivamente
scaricare il form ..... quindi nell'evento queryunload ho inserito un ciclo
Do .... Loop. In tal modo pongo a 1 il check1 per dire alla Sub Invia di non
mandare piů messaggi e nello stesso tempo aspetto che "invia" finisca di
ricevere tutte le risposte prima di uscire....
Private Sub form_queryunload(Cancel As Integer, UnloadMode As Integer)
    Set Resizer = Nothing
    MDIForm1.mnuinfostazione.Enabled = True
    Check1.Value = 1
    Do
        DoEvents
    Loop Until Check2.Value = 1
End Sub
ALMENO COSI' PENSAVO ........... (sigh!).
Il risultato č invece che quando premo la "x" pongo il Check1 (ho reso
visibili i Check, quindi vedo quando sono checked) a 1 e poi si blocca tutto
(ovvero rimane nel ciclo Do ... Loop del queryunload)
Avevo esigenza di aspettare a chiudere il form perchč se lo chiudo e nel
frattempo arrivano le risposte dei messaggi ( che generano delle scritture
su delle label del form ) riparte con il form_load e quindi con la chiamata
alla funzione ........ in pratica io chiudo il form ma lui si riapre da
solo.
Insomma un incubo, ho perso tre giorni appresso a questa "fesseria" che
penso sia frutto solo della mia inesperienza.
Ho provato anche a dichiarare una Variabile Globale in modo che nell'evento
load faccio la chiamata invia a condizione che .... ma la fa lo stesso.
Grazie a tutti.
Appendice
Posso fare quello che mi serve intercettando la pressione del tasto "X" del
form ?
Nel senso che quando premo la "X" passo il controllo ad un'altra routine che
aspetta fino all'arrivo di tutti i messaggi e poi scarica il form.
Solo che non so come fare .... potreste farmi un esempio di intercettazione
della "X" ??
Grazie

Secondo me ti succede un casino perchè il programma tenta di fare un'Unload
prima ancora di finire il Load del form.
Prova a mettere un controllo Timer nel form e lo setti Enabled=True e
Interval=100. Dentro il Timer richiami Invia...e fai un Enabled=False del
timer stesso per essere sicuro che non riparte un'altra volta.  La X la puoi
intercettare dentro l'evento UNLOAD del Form...se usi un form semplice vai
in unload piuttosto che in QueryUnload anche se dovrebbe essere lo stesso.
Gianni Moretti