Newsgroup: it.comp.lang.visual-basic
Titolo: L'applicazione rimane in corso

Mi sono accorto in questo istante che la mia applicazione rimane in corso!
E' formata da un menu da cui si possono richiamare altre form, nel momento
che richiamo altre form
viene fatto unload menu.
Quindi rimane sempre aperta solamente una maschera!
Io chiudo la mia applicazione facendo Unload menu ( ovvero la maschera
principale)!
E' sbagliato? Devo fare qualche altro comando per chiudere l'applicativo?
Grazie a tutti!!!!
Siete fantastici!!!!!
Ciao

...


 wrote in message
8idbbr$giq$1...@fe2.cs.interbusiness.it...


Però non rimane nella lista dei processi!
Rimane solo il play di Visual Basic schiacciato!!
Voi come fate a chiudere il programma? Fate l'unload dell'ultima maschera?

 wrote in message


Mettendo end mi va in palla il vb6 con la solita frase "Questo progr. ha
eseguito un operazione non valida e sarà terminato" ( anche se è quello che
voglio in effetti).
Ciao

...


Perà penso che è meglio che reinstallo il vb perchè:
tutte le volte che si ferma perchè ha trovato un errore e c'è lo possibilità
di vedere il
l'errore con (debug) oppure di terminare il programma con END, scegliendo
quest'ultima
mi si chiude il VB con l'errore che mi da mettendo END nel codice come mi
avete detto!
Ciao

Non so cosa possa essere ma dove hai messo l'end?
L'ho messo in form_keypress quando keyascii=27 e la scelta
del "Vuoi chiudere l'applicazione" è sì.
Per me devo reinstallare il vb.
Ciao

 wrote in message
8idfl8$nmp$1...@fe2.cs.interbusiness.it...


Sarebbe consigliabile NON terminare i programmi con l'End, non è una buona
soluzione. Visual Basic chiude l'applicazione quando tutte le form sono state
scaricate (con l'unload), tutte le classi (anche da DLL ActiveX, controlla)
vengono settate a Nothing e quando tutti i subclassing che fai in un prg vengono
inizializzati o scaricati. Se per esempio "attacchi" dei msg a quelli standard
(cioè subclassi) devi poi ricordarti di "staccarli", altrimenti avrai un
bell'errore nell'applicazione.
In ultimo, se hai fatto tutto questo, puoi assicurarti della chiusura
dell'applicazione con una bella ExitProcess.
Ciao!

Per me devo reinstallare il vb.
NON è colpa di VB!
Non reinstallare niente che tanto non cambierebbe.
Il problema è che ti rimane aperto un form (probabilmente su cui è stato
fatto un SetParent() o qualcos'altro di strano).
Se non chiudi il form secondario rimasto aperto e forzi l'End potresti avere
appunto il GPF.
E se non tutti i form sono stati scaricati l'app. ti rimane attiva anche se
hai chiuso il form principale.
Fai una verifica: quando chiudi l'app (senza end) e tutto dovrebbe essere
fermo, e invece non lo è, prova a guardare nel debug la collection Forms() e
vedere se hai ancora qualcosa in memoria.
Se non è un form (molto strano) è qualche altro oggetto non scaricato.
Ciao

Allora se in memoria rimangono delle istanze di alcune classi (le più
frequenti sono le form) l'applivcazione non termina (puoi essere brutale e
usare End, ma non è il metodo migliore in pratica è TerminateProcess, cosa
che fa VB automaticamente quando si chiudono tutte le istanze e tutti i
form).
Nelle altre maschere sei sicuro di aver fatto l'unload e non l'Hide?
Comunque se vuoi essere sicuro nell'unload della tua maschera principale
metti anche End, ci pensa VB a cancellare tutte le istanze ancora esistenti
degli oggetti...
----------
Ciao
sabba

Fai una verifica: quando chiudi l'app (senza end) e tutto dovrebbe essere
fermo, e invece non lo č, prova a guardare nel debug la collection Forms() e
vedere se hai ancora qualcosa in memoria.
Qual'č il comando per vedere tutti i forms?
Ciao e grazie

Quando avevo provato con l'End non avevo messo :
Unload menu
End
ma solo end e mi dava errore!!!!
Adesso, mettendo l'End dopo Unload, mi chiude come mi avete detto tutti gli
oggetti aperti
e il codice effettivamente si ferma!!!!!!!!!!
Ciao
Grazie a tutti

> Perà penso che è meglio che reinstallo il vb perchè:
fermo la!
VB non centra niente (o meglio... se reinstalli il problema rimane, stanne
certo);
il problema gira tutto intorno all'istruzione "End";
quando questa istruzione viene eseguita il programma viene brutalmente
interrotto, senza richiamare ne i metodi di "Unload" delle varie form
eventualmente caricate ne i metodi "Terminate" degli eventuali oggetti
istanziati;
in altre parole: il codice all'interno delle funzioni "Form_Unload" non
viene eseguito (e se all'interno di queste funzioni c'è qualche chiamata
alle API per rimettere a posto qualcosa modificato precedentemente, puoi
facilmente immaginare il motivo dell' "esplosione")
per vedere quante e quali form sono ancora caricate in memoria puoi
utilizzare la collection Forms
es.
    Dim frm As From
    For Each frm In Forms
        Debug.Print frm.Name, frm.Caption
    Next
allo stesso modo puoi eliminare le form "fantasma" con
    Dim frm As From
    Do While Forms.Count
        Set frm = Forms(0)
        Unload frm
        Set frm = Nothing
    Loop
non è molto elegante, ma funziona;
ciao

Grazie HellBoy
Ciao