Oggi avevo bisogno di usare in una form una DataTable e volevo che alla dispose della form venisse fatta anche la dispose della DataTable e tra me ho pensato potrei usare un DataSet che posso aggiungere come un componente e che verrà quindi aggiunto alla collezione components e alla Dispose della form verrà rilasciato visto che il codice generato per la dispose della form è il seguente:
'Form overrides dispose to clean up the component list.
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
Peccato che la quando viene fatta la new del DataSet non viene passato l'oggetto components in quanto non esiste un'overloads per la New del DataSet con un parametro System.ComponentModel.Container, tra l'altro questo vale per tutti i componenti che ho provato ad aggingere.
Morale quando chiudiamo la form sui componenti non viene richiamata la Dispose.
Per risolvere io mi sono creato la mia DataTable e l'ho aggiunta alla collezione components:
Me.DplDataTable = New System.Data.DataTable
Me.components.Add(Me.DplDataTable)
Credo però che un'overloads con il parametro System.ComponentModel.Container sui componenti che possono essere aggiunti tramite designer non guasterebbe, tanto più che quando si aggiunge una classe componente al progetto queste sono le New che vengono create automaticamente nel file .Designer.vb:
Public Sub New(ByVal Container As System.ComponentModel.IContainer)
MyClass.New()
'Required for Windows.Forms Class Composition Designer support
Container.Add(Me)
End Sub
Public Sub New()
MyBase.New()
'This call is required by the Component Designer.
InitializeComponent()
End Sub