Newsgroup: it.comp.lang.visual-basic
Titolo: [?][Sub Main] sub main lancia un programma ma poi....non finisce più

Salve,
ok, sintetico al massimo perchè mi sono stufato di stare qui
davanti :))
Ho un modulo che mi lancia un programma, qui dentro ho una sub
main, al suo interno istanzio un oggetto come un form (form splash), lo
carico faccio quello che devo fare ammazzo l' oggetto e poi visualizzo,
sempre come oggetto, il mio form principale; in pratica una cosa del
genere:
Sub Main()
    Dim Splash As frmSplash
 
    Set Splash =
New frmSplash
    Set Principale = New frmPrincipale
Splash.Show vbModal
 
    Load Principale
 
    Set Splash =
Nothing
 
    Principale.Show
End sub
quando nel form principale
chiamo l' evento unload del form fa tutto quello che deve fare ma non
muore!! Il programma non termina. Ho pensato, bhè forse perchè rimane in
memoria ancora un istanza di Principale...allora ho modificato il tutto
mettendo una Routine che mi uccide (giustamente) anche questo oggetto
creato nella sub main ma non non succede niente, il programma resta ancora
inpiedi...dove stò sbagliando??
Tzè...una volta facevo programmi e
sperare che partissero o che non si inchiodassero, adesso invece devo
sperare che terminino...hummm, mica lo so che cosa sia peggio :))
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it

 ha scritto nel messaggio
news:157Z29Z81Z46Y9...@usenet.iol.it...


>Io di solito metto un End nel Form_QueryUnload o nel Form_Unload
Hemm....però l' end è un po una porcata perchè è una forzatura, non è che
termini il programma in modo corretto, lo interrompi con una bastonata :))
A questo punto non ha senso manco il form_unload, perchè nel tuo caso è l'
end che ti termina il programma...hummm...non sono convito :))


 ha scritto nel messaggio
news:157Z29Z81Z46Y...@usenet.iol.it...


sperare che terminino...hummm, mica lo so che cosa sia peggio :))
;-P
la prima, credimi... ;-)))
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

with the Open
statement and to clear variables.
Quello che mi fa paura è proprio
questo "immediately"; o meglio, te puoi mettere un end in qualunque parte
di un tuo programma e bloccarlo qualunque cosa stai facendo.
Form_Unload è
un po diverso...


la prima, credimi... ;-)))
Eh...perň adesso che parte devi prenderlo a calci per farlo terminare, oh,
programmo talmente bene che i miei propgrammi sono a prova di bomba!! Non
vanno mai giů, manco quando glielo dici espressamente :)))


 Form_Unload è un po diverso...
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

form_unload, esegue quello che ho scritto li ma il programa resta appeso.
sě, ma intendevo per la frmSplash...


 with the Open statement and to clear variables.
L'unico problema nell'uso di End è che spesso restano dei cadaveri di file
tmp nella directory temp di Windows. Comunque se non ti importa, usalo pure.
Ciao
*Roby*

 form_unload, esegue quello che ho scritto li ma il programma resta appeso.
Magari non centra nulla, ma controlla di non fare riferimento a niente che
stia sulla form nella FormUnload, altrimenti lui la ricarica implicitamente.
Fai anche attenzione che non siano rimasti in giro dei riferimenti alla
variabile form. Magari hai passato la variabile form come parametro a un tuo
oggetto, o l'hai assegnata ad una Static in un modulo, o robe simili.
Eventualmente interrompi il porgramma quando è appeso e nella finestra
immediata scrivi:
?doevents
Ti ritorna il numero di finestre aperte. Se è maggiore di 0, basta che ti
scrivi una funzioncina tipo questa:
Public Sub TestFinestreAperte()
   Dim frm As Form
   For Each frm In Forms
      Debug.Print frm.Name
   Next
End Sub
E la richiami sempre dalla finetsra immediata per sapere quei finestre sono
aperte.
Ciao
*Roby*

 tmp nella directory temp di Windows. Comunque se non ti importa, usalo
pure.
in situazioni particolari mi capitava che, dopo la chiamata a End, la
finestra del programma fosse aperta e visibile, ma non rispondesse ai
comandi (click ecc..)
Faber

with the Open statement and to clear variables.
Attenzione: l'end andrebbe *sempre* evitato.
Se ti dimentichi oggetti aperti, handle non rilasciati o roba non rimessa a
posto rischi un bel GPF.
E se non esce il GPF probabilmente ti rimane della memoria non liberata.
Se il prog. non si chiude è perchè è stato dimenticato un oggetto caricato,
probabilmente un form.
Ciao

genere:
Ti sei dimenticato un form caricato da qualche parte :)
Ciao


Perche' fai "new frmSplash" e "new frmPrincipale"?
Ti servono più istanze di questi due form?
Forse ti basterebbero un semplice
frmSplash.Show
Load frmPrincipale
e dall'evento "Load" del form principale chiami
unload frmSplash
Eventualmente, al termine del programma, devi controllare se ci sono form rimasti aperti
ciclando sulla collection Forms come ha suggerito Roberto Piazzolla...

Ok, per tutti, posto il codice paro paro come l' ho scritto io:
Nel
modulo in cui c'è la sub main:
Sub main()
    Dim Splash As frmSplash
Set Splash = New frmSplash
    Set Principale = New frmPrincipale
Splash.Show
 
    Load Principale
 
    Set Splash = Nothing
Principale.Show
End Sub
nello splash questo è quello che faccio:
Private Sub Form_Load()
    Me.Picture = LoadPicture("....)
End Sub
Private Sub Timer1_Timer()
    MasterKey = HKEY_CURRENT_USER
    ......
...
    ......
    Me.Hide
 
    Timer1.Enabled = False
Unload Me
End Sub
infine nel mio form Principale, quando devo uscire
scrivo un bel Unload Me.
Così facendo in effetti mi resta appesa un
istanza di Principale, tanto è vero che nel modulo avevo dichiarato una
variabile publica, in modo da poter richiarmarla anche dallo stesso form
principla e d ucciderla, ma non ha funzionato. Ho allora scritto una
procedura dento il modulo che, mi settasse a nothing l' istanza di
principale ma niente di niente...non ho più messo mano al codice e non ho
ancora provato quello che dice Roberto, domani provo e vedo quale istanza
resta appesa...
Comunque questo è quanto ho scritto, suggerimenti ben
accetti :)


 istanza di Principale, tanto è vero che nel modulo avevo dichiarato una
Se e' principale a rimanere appeso, perche' non posti la sub form_load del form
principale?

Ho risolto,
questa mattina ho levato l' istanziamento del form principale
e non ho più problemi, quello che non capisco però è perchè, anche se lo
settavo a nothing, mi restava sempre in piedi la sua istanza.
Chi dava
problemi era proprio l' oggetto Principale, istanza del form principale.
Chè, com' è che si dice in questi casi...non capisco ma mi adeguo :)) Ah
dire il vero forse so perchè andava in errore, ma tagliamo la testa al toro
e rendiamoci la vita più semplice :))
E' proprio vero, i problemi ce l' ha
chi se li crea!!
Saluti :))
