Oppure

Loading
08/04/12 14:05
peppino84
ciao a tutti
faccio un piccolo esempio
quando lancio l'eseguibile compare il form iniziale in cui ci sono 2 optionbutton da cui selezionare uno dei due metodi ed un command per avviare quello selezionato


Private Sub Command_Click()
Option1 = True    'selezione di defoult

If Option1 = True Then
Form1.Show
ElseIf Option2 = True Then
Form2.Show
End If

End Sub



supponiamo che seleziono il primo e lo avvio
si apre il form1
non lo utilizzo, non lo uso, non faccio partire alcun esecuzione (non inserisco dati ne inizializzo dati), excel non entra affatto in gioco
ho solo 2 form aperti, il Form1 e Form0 iniziale

se li chiudo entrambi (crocetta rossa) resta comunque il "progetto1" in esecuzione nel task manager

dove lo piazzo l' unload??
se lo metto dopo il form.show o anche prima dell'endsub mi scompare il form0 iniziale ... ma non voglio!!!

augurissimi a tutti !!!!
p.s.: non mangiate troppo !!!
aaa
08/04/12 16:07
GrG
Ripeto il consiglio detto all'inizio, nell'evento form_unload di tutte le form chiudi tutte le altre form, nell'esempio che hai fatto dovresti scrivere qualcosa del tipo:

'nelle dichiarazioni
Dim aForm as Form

Private Sub Form1_Unload(Cancel As Integer) ' Scaricamento dei form
   For Each aForm In Forms
      Unload aForm
   Next
End Sub


Questo codice puoi anche scriverlo solo nel form principale, dipende da come funziona il tuo programma..

Se il form principale deve necessariamente restare sempre aperto va bene (altrimenti se chiuso si chiude tutto il programma), se hai fatto in modo che volendo il form principale si può chiudere (quindi non usare questo codice) ma si può continuare ad usare altri form metti il codice negli stessi :k:

Ne approfitto per fare gli auguri anche a tutti voi :)

@Nessuno:
Complimenti per la firma :D
aaa
11/04/12 3:18
peppino84
ciao ragazzi
il problema è risolto
con l' unload non ci riuscivo
ho agito direttamente sul task manager
(ho preso spunto da un'altra discussione di GrG su questo argomento)

if "tutti i form sono chiusi (invisibili)" then
Dim obj As Object
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name='PNM v3.0.exe'")
   obj.Terminate
Next
End If
endif



grazie a tutti per la collaborazione
buon lavoro
bye
aaa
11/04/12 8:47
Visto che non riuscivi a far andare la nave in porto, l'hai affondata ...

NON è la soluzione corretta ...
11/04/12 10:47
peppino84
sarà ....
magari non è la soluzione migliore ma di certo saprai che ne esistono diverse...
la mia soluzione per quanto possa non essere elegante funziona e non pesa niente, pertanto mi accontento e godo senza impazzire ....

grazie ancora a tutti !!!
buon lavoro
bye
aaa
11/04/12 11:27
Postato originariamente da peppino84:

sarà ....
magari non è la soluzione migliore ma di certo saprai che ne esistono diverse...


Allora sarò più chiaro ... questa è, tra le soluzioni, una di quelle sbagliate.

Per capirci, se termini un programma in quel modo, non è detto che gli ultimi dati siano scritti su database (o su disco in genere) e questo determina corruzione delle informazioni e altri problemi più gravi.

Un programmatore sa che per terminare un programma può anche spegnere un computer di brutto, ma non adotterebbe mai questa "soluzione".

Capisco che non te ne importi nulla, ma questo è un forum di programmazione e bisogna dire le cose come stanno, soprattutto per chi legge e pensa che la tua sia una strada da seguire.
Ultima modifica effettuata da 11/04/12 11:32
11/04/12 12:58
GrG
Comunque, a questo punto visto che hai già adottato una soluzione scorretta, sappi che esiste anche l'istruzione End che fa la stessa cosa, termina il processo...

Per primo ammetto che ho utilizzato in alcuni programmi che non mi si chiudevano l'istruzione End, ma da abbastanza tempo non la utilizzo più, perchè (almeno fino ad adesso) sono sempre riuscito a "gestire bene" i miei programmi.. quindi ti consiglio per lo meno di non adottarla come soluzione definitiva, ma quando hai tempo di capire perchè il programma non ti si chiude.. io la prenderei come una sorta di "sfida", di "gioco"...


Adesso so che dopo aver nominato l'End nessuno mi picchierà :asd:
aaa
11/04/12 13:53
Neanche l'End va bene perché non permette che gli eventi di Unload vengano eseguiti.

Si fa con l'Unload di ogni form e chiudendo opportunamente tutte le istanze di oggetti "esterni" creati in precedenza.