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

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.

 End Sub
Osserva le chiamate allo stack. Form_Load si chiude dopo Form_QueryUnload.
Attiva il form con un'altra procedura.

Si ma come ????
Non ne ho idea.
Grazie.
--------------------------------
Inviato via 
http://usenet.iol.it
 

Prova Form_Activate
CiaoZ
SebaMix

Non va bene perchè il codice si ripeterebbe più volte, in quanto non c'è un
solo form nella mia applicazione.


 Non ne ho idea.
Se il tuo form e quello di lancio, crea una main per lanciare il programma e
dopo aver caricato il form, _sempre dal main,_ richiami la procedura
Invia();
se il form mom e' di lancio, dopo averlo aperto e _sempre dala procedura di
apertura del form,_ richiami la procedura Invia()

 wrote in message ...

oppure:
sul form ci metti un pulsante che ti lancia la procedura Invia()