Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Differenza tra  me.close o me.dispose di un form
Forum - C# / VB.NET - Differenza tra me.close o me.dispose di un form

Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 10:44
Venerdì, 08/05/2020
Buongiorno, scusatemi per la domanda forse banale.

Girando per i vari forum del web su vb.net... ho notato che per la chiusura di un form CHILD di un form MDI, alcuni propongono di utilizzare nel form CHILD l'istruzione
Codice sorgente - presumibilmente Plain Text

  1. me.close

, altri
Codice sorgente - presumibilmente Plain Text

  1. me.dispose

.

Mi sapreste dire in cosa consiste la differenza e quale delle due sia più opportuna?

Grazie

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:42
Venerdì, 08/05/2020


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:37
Venerdì, 08/05/2020
Close, chiude l'oggetto ma non libera le risorse, e l'oggetto può essere riaperto.
Dispose, chiude l'oggetto e libera le risorse, l'oggetto non può essere riaperto, deve essere ricreato.

metti un Button1 in Form1 e prova questo codice con Close:

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  3.         Me.Close()
  4.     End Sub
  5.  
  6.     Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
  7.         Me.Text = "Close" : Me.Refresh()
  8.         System.Threading.Thread.Sleep(2000)
  9.     End Sub
  10. End Class



Quando clicchi Button1, nella barra del titolo appare Close e dopo due secondi il form si chiude.

se cambi Close con Dispose:

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  3.         Me.Dispose()
  4.     End Sub
  5.  
  6.     Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
  7.         Me.Text = "Close" : Me.Refresh()
  8.         System.Threading.Thread.Sleep(2000)
  9.     End Sub
  10. End Class



il Form si chiude immediatamente, perché distrutto da Dispose.

Ultima modifica effettuata da Carlo il 08/05/2020 alle 14:04


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 13:56
Venerdì, 08/05/2020
Grazie

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 14:00
Venerdì, 08/05/2020
Testo quotato

Postato originariamente da Carlo:

Close, chiude l'oggetto ma non libera le risorse, e l'oggetto può essere riaperto.
Dispose, chiude l'oggetto e libera le risorse, l'oggetto non può essere riaperto, deve essere ricreato.

metti un Button1 in Form1 e prova questo codice con Close:

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  3.         Me.Close()
  4.     End Sub
  5.  
  6.     Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
  7.         Me.Text = "Close" : Me.Refresh()
  8.         System.Threading.Thread.Sleep(2000)
  9.     End Sub
  10. End Class



nella barra del titolo appare Close e dopo due secondi il form si chiude.

se cambi Close con Dispose:

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  3.         Me.Dispose()
  4.     End Sub
  5.  
  6.     Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
  7.         Me.Text = "Close" : Me.Refresh()
  8.         System.Threading.Thread.Sleep(2000)
  9.     End Sub
  10. End Class



il Form si chiude immediatamente, perché distrutto da Dispose.



Vale anche quando si usa ad esempio using connection ... o using command dopo end using é bene fare command.dispose  e connection.dispose?? visto che entrambi vengono di volta in volta rigenerati?? Grazie

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:20
Venerdì, 08/05/2020
Testo quotato

Postato originariamente da alip1:
Vale anche quando si usa ad esempio using connection ... o using command dopo end using é bene fare command.dispose  e connection.dispose?? visto che entrambi vengono di volta in volta rigenerati?? Grazie


Dipende da quando esegui l'istruzione.
END USING, libera tutte le risorse impegnate dall'USING corrispondente.

se fai

Using connection As ....
....
....
....
End Using

' non potrai fare in coda

connection.Dispose()

perché l'oggetto connection non esiste più.

Ultima modifica effettuata da Carlo il 08/05/2020 alle 14:26


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 18:42
Mercoledì, 13/05/2020
Grazie

PM Quote