Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB.Net 05] Chiudere tutti i form aperti

    Ho la necessità di chiudere con un ciclo tutti i form aperti del mio applicativo per far sì che resti visibile ed utilizzabile solo l'ultimo.
    Come si fa in .Net ad implementare una routine che faccia ciò?
    In vb6 era semplice:
    codice:
    Public Sub sChiudiForm()
        '   chiude tutti i form aperti
        Dim fForm As Form
        For Each fForm In Forms
            Unload fForm
        Next
    Exit Sub
    ma ora col .Net non trovo la classe relativa all'insieme Forms!
    help pliiiiiizzzzz

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    A livello teorico, dovresti memorizzare in una lista (es. ArrayList) tutti i riferimenti alle istanze dei form creati; quando desideri chiudere tali form, scandendo gli elementi della lista, chiami il metodo Close e rimuovi successivamente il riferimento stesso dalla lista per consentire che il Garbage Collector rilasci successivamente le risorse inutilizzate.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Originariamente inviato da alka
    A livello teorico, dovresti memorizzare in una lista (es. ArrayList) tutti i riferimenti alle istanze dei form creati; quando desideri chiudere tali form, scandendo gli elementi della lista, chiami il metodo Close e rimuovi successivamente il riferimento stesso dalla lista per consentire che il Garbage Collector rilasci successivamente le risorse inutilizzate.

    Ciao!
    quindi mi stai dicendo che non esiste un sistema come quello che ho postato e che usavo in vb6, giusto?
    beh, vedrò cosa si può fare. grazie alka

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da ladyBlu
    quindi mi stai dicendo che non esiste un sistema come quello che ho postato e che usavo in vb6, giusto?
    Per fortuna (purtroppo, qualcuno dirà) VB.NET non considera i form allo stesso modo di VB6.

    Nell'ambiente precedente, ciascun form era allo stesso tempo "classe" e "istanza", o semplicemente un form con un nome attraverso il quale poteva essere manipolato, aperto, chiuso, distrutto, spostato e così via...

    Nella programmazione con .NET, ciascun form è ora una classe vera e propria e come tale definisce un modello comportamentale, ereditando caratteristiche dalla classe base System.Windows.Forms.Form, che può essere utilizzato da tutte le istanze del form stesso le quali devono essere create.

    E' possibile, ad esempio, creare più copie in memoria dello stesso form, possibilità che in VB6 non era assolutamente attuabile se non con meccanismi non integrati nell'ambiente di sviluppo.

    Concludendo, in VB.NET tu disponi sempre di una classe che definisce il comportamento del form e della possibilità di crearne un'istanza, assegnando il riferimento ad una variabile; quando l'oggetto è creato, attraverso il riferimento puoi raggiungerlo e manipolare le sue caratteristiche, comuni a tutte le istanze della stessa classe di form, ma ciascuna istanza avrà il proprio valore in un determinato momento.

    Nel tuo caso, puoi dotare il form principale di una variabile per ogni form dell'applicazione e memorizzare al suo interno, di volta in volta, il riferimento al form creato per chiuderlo successivamente; in alternativa, suppongo che vi sia nella classe Application una proprietà che contenga i form istanziati (dovrei controllare) affinchè sia possibile scandirne l'elenco e intimarne a tutte la chiusura, cancellando opzionalmente il riferimento.

    Faccio ulteriori controlli e magari ti saprò dire in seguito.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Originariamente inviato da alka
    ...
    Nel tuo caso, puoi dotare il form principale di una variabile per ogni form dell'applicazione e memorizzare al suo interno, di volta in volta, il riferimento al form creato per chiuderlo successivamente; in alternativa, suppongo che vi sia nella classe Application una proprietà che contenga i form istanziati (dovrei controllare) affinchè sia possibile scandirne l'elenco e intimarne a tutte la chiusura, cancellando opzionalmente il riferimento.

    Faccio ulteriori controlli e magari ti saprò dire in seguito.

    Ciao!
    Per ora sto tentando la strada che mi hai suggerito tu: ogni volta che eseguo la load di un form vado a caricarmi l'Handle dello stesso in un array pubblico. poi, quando chiudo il form elimino l'Handle dall'array in modo che quando dovrò forzare la chiusura di tutti i form aperti non trovo questi già chiusi.
    Mi sembra un po' macchinoso però funziona.

    Resto in attesa, se tu o altri possono proporre una soluzione più performante sarei ben contenta di provarla e utilizzarla.

    Grazie alka, e grazie a tutti


    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.