Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB.NET]Scaricare un form

    Come si fa a scaricare un form? Io usavo l'istruzione me.close, ma mi sono accorto che non lo scarica, perché se riapro lo stesso form i valori che avevo inserito nella caselle di testo restano se non azzero i valori prima di chiuderlo, quyindi resta in memoria.

  2. #2
    Me.Close si limita a chiudere la finestra del form, ma la variabile che contiene l'istanza del form deve essere distrutta. Esempio:

    codice:
    'creo una istanza del Form2
    Dim f As New Form2
    
    'mostro il form
    f.ShowDialog(Me)
    
    'nel form2 l'utente chiude il form (chiamata a Me.Close)
    'f contiene ancora il form
    
    'distruggo la variabile
    f = Nothing
    Chi non cerca trova.

  3. #3
    Quindi anche se non uso una variabile viene creata una istanza e quando chiudo il form e lo riapro viene usata sempre la stessa istanza del form creata in automatico?

  4. #4
    'distruggo la variabile
    f = Nothing
    L'istruzione f=Nothing, non distrugge l'oggetto, ma cancella solo il riferimento all'oggetto presente nella variabile in modo che, il GarbageCollector, possa rilasciare le risorse nel momento che ritiene più opportuno.
    La classe Form implementa l'interfaccia IDisposable, pertanto, sarebbe più corretta l'istruzione
    codice:
    f.Dispose
    la quale, richiede, in modo esplicito, il rilascio delle risorse.


    Facci sapere...
    Ciao

  5. #5
    Originariamente inviato da Cavaliere Nero
    Quindi anche se non uso una variabile viene creata una istanza e quando chiudo il form e lo riapro viene usata sempre la stessa istanza del form creata in automatico?
    Ma fammi capire... che codice usi per aprire il form?
    Chi non cerca trova.

  6. #6
    Uso questo per aprirlo:

    codice:
    Nome_form.ShowDialog
    Ma se creo più di un istanza in una stessa variabile come faccio poi a rilasciare le risorse di una sola istanza?

  7. #7
    Originariamente inviato da Cavaliere Nero
    Uso questo per aprirlo:

    codice:
    Nome_form.ShowDialog
    Ma se creo più di un istanza in una stessa variabile come faccio poi a rilasciare le risorse di una sola istanza?
    Lo sospettavo. La tecnica che hai usato, pur funzionante, non è tanto corretta in un linguaggio ad oggetti con VB.NET. Purtroppo MS ha deciso di implementare questa soluzione (cioè creare una istanza automatica dei form) per venire incontro ai programmatori VB6.

    Immaginando di voler aprire il Form2 secondario in seguito ad un click su di un pulsante del Form1, sarebbe meglio scrivere:

    codice:
    'crea l'oggetto
    Dim f As New Form2
    
    'mostra il form
    f.ShowDialog(Me)
    
    'dopo la chiusura del form
    f.Dispose
    f = Nothing
    Chi non cerca trova.

  8. #8
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Originariamente inviato da tas
    ...La tecnica che hai usato, pur funzionante, non è tanto corretta in un linguaggio ad oggetti con VB.NET....
    ...sarebbe meglio scrivere:

    codice:
    'crea l'oggetto
    Dim f As New Form2
    
    'mostra il form
    f.ShowDialog(Me)
    
    'dopo la chiusura del form
    f.Dispose
    f = Nothing
    Effettivamente (se non mi sbaglio) con la prima versione di vb.net per richiamare un form era obbligatorio usare la procedura che hai usato come esempio. Ora con vb.net 2008 si può fare in tutte e due i modi, ma una cosa non ho capito... tu dici "sarebbe meglio scrivere.." ma perchè sarebbe meglio? In pratica, se richiamo direttamente il form (form.showdialog()) o passo tramite una variabile, cosa cambia? Non ho mai capito se c'è una differenza sostanziale o no.
    Grazie

  9. #9
    Originariamente inviato da alpynet
    Effettivamente (se non mi sbaglio) con la prima versione di vb.net per richiamare un form era obbligatorio usare la procedura che hai usato come esempio. Ora con vb.net 2008 si può fare in tutte e due i modi, ma una cosa non ho capito... tu dici "sarebbe meglio scrivere.." ma perchè sarebbe meglio? In pratica, se richiamo direttamente il form (form.showdialog()) o passo tramite una variabile, cosa cambia? Non ho mai capito se c'è una differenza sostanziale o no.
    Grazie
    Hai detto bene, nella prima versione di VB.NET non era possibile scrivere Form2.ShowDialog, poi però si sono accorti che tanti programmatori VB6 si trovavano spaesati e così nelle versioni successive hanno aggiunto tale funzionalità (nel namespace My), sacrificando però la correttezza nella programmazione ad oggetti. In C# non troverai mai simili accrocchi. In pratica, nelle ultime versioni di VB.NET, dietro alle quinte viene creata una istanza automatica del form che viene chiamata con lo stesso nome della classe. E' come se scrivessi:

    'in un modulo
    codice:
    Public Form2 As New Form2
    
    'in un qualsiasi punto del programma
    Form2.ShowDialog(Me)
    Perché non usare questa tecnica? Perché non è una buona tecnica di programmazione, se ti abitui ad usarla poi farai più fatica a passare ad un altro linguaggio ad oggetti. Inoltre tenere sempre aperta una istanza del form comporta un dispendio maggiore di memoria.
    Chi non cerca trova.

  10. #10
    Ed io venendo dalla programmazione in VB6 ho dimenticato che anche i Form sono oggetti.
    Ma se faccio:

    codice:
    Dim f As New Form2
    f = New Form2
    che succede? Me ne crea due nella stessa variabile o il primo viene rilasciato automaticamente?

    Credo sia più la seconda ipotesi, ho provato e se faccio f.Dispose me ne chiude solo una di finestra... e anche se rifaccio f.Dispose non la chiude l'altra.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.