Distruggere i Controlli grafici posti in un Contenitore

Da Gambas-it.org - Wikipedia.

Per eliminare i Controlli posti in un Contenitore, si possono adottare alcune modlità.

Uso diretto del Metodo ".Clear()" della Proprietà ".Children"

Il Metodo ".Clear()" della Proprietà ".Children" di un Contenitore distruggerà tutti i Controlli presenti nel Contenitore medesimo.

Nel seguente esempio pratico poniamo vari Controlli sul Form, e con essi anche un Button cliccando il quale produrrà l'azione distruttiva:

Public Sub Button1_Click()

 Me.Children.Clear

End

Qui i Controlli sono posti ad esempio in un Panel:

Public Sub Button1_Click()

 Panel1.Children.Clear

End

Uso della Classe Container

Alla variabile del tipo della Classe non creabile Container si assegna l'Oggetto Contenitore che contiene i suo Controlli Figli, che saranno distrutti con il Metodo ".Clear()".

Public Sub Button1_Click()

 Dim cn As Container = Me

 cn.Children.Clear
 
End

Uso della Classe ContainerChildren

Alla variabile del tipo della Classe non creabile ContainerChildren, va assegnato il riferimento ai "Figli" (Children ) del Contenitore, e successivamente va usato il Metodo ".Clear()".

Mostriamo un esempio pratico:

Public Sub Button1_Click()

 Dim cn As ContainerChildren

 cn = Me.Children

 cn.Clear
 
End

Usando il ciclo "For...Each" e la variabile del tipo dei Controlli da distruggere

Se in un Contenitore sono presenti Controlli appartenenti a un unico tipo (ad esempio soltanto Button), allora si potrà usare l ciclo "FOR...EACH" e la variabile del tipo dei Controlli da distruggere.
La distruzione avverrà mediante l'uso del Metodo ".Delete" della Classe impostata dei Controlli da distruggere.

Mostriamo un esempio pratico, nel quale in un Panel sono contenuti soltanto dei Button:

Public Sub Button5_Click()

 Dim bt As Button

 For Each bt In Panel1.Children
   bt.Delete
 Next

End

Distruggere soltanto uno o alcuni Controlli del medesimo tipo

Se si vuole distruggere soltanto uno o alcuni dei Controlli del medesimo tipo posti su un Contenitore, si potrà fare riferimento a una loro Proprietà.

Usando il ciclo "For...Each" e la variabile di tipo "Object"

Se invece sul Contenitore sono presenti Controlli di vari tipi, e si intende eliminare soltanto i Controlli appartenenti a un determinato tipo, allora con il ciclo "FOR...EACH" si utilizzerà una variabile di tipo Object, nella quale caricare tutti i Controlli e distinguerli successivamente all'interno del ciclo.
La distinzione del tipo, al quale appartiene ciascun Controllo, è effettuata mediante il Metodo "Object.Type()"; mentre la distruzione avverrà mediante l'uso del Metodo ".Delete" della Classe Object.

Mostriamo un esempio pratico, nel quale su un Form sono presenti vari tipi di Controllo. Si intende distruggere soltanto i Button:

Public Sub Button1_Click()

 Dim ob As Object

 For Each ob In Me.Children
   If Object.Type(ob) = "Button" Then ob.Delete
 Next

End

Distruggere uno specifico Oggetto

Se si vuole distruggere uno specifico Oggetto, solitamente si fa riferimento al nome del Controllo da distruggere.

Mostriamo un esempio, nel quale sono posti vari Controlli e un Button avente nome "Button1"; si intende distruggere tale Button:

Me["Button1"].Delete

Oppure si potrà fare esplicito riferimento alla Proprietà ".Name" del Controllo da distruggere (ovviamente si potranno prendere in considerazione anche altre Proprietà appartenenti al Controllo d distruggere).
Se i Controlli, presenti sul Contenitore Padre, appartengono a tipi diversi, è opportuno usare una variabile di tipo Object per intercettare ogni Controllo posto nel Contenitore, scegliendo poi quello da distruggere.

Mostriamo un esempio pratico, nel quale si hanno Controlli di vario tipo, tra i quali tre Button. Intendiamo distruggere soltanto il Button avente "Button2" come valore della sua Proprietà ".Name".

Public Sub Button1_Click()

 Dim ob As Object

 For Each ob In Me.Children
   If ob.Name = "Button2" Then ob.Delete
 Next

End

Distruggere soltanto il Controllo, appartenente a un unico Gruppo di Eventi, che ha avviato la routine di distruzione

Se si hanno più Controlli, appartenenti a un unico Gruppo di Eventi, per distruggere soltanto il Controllo che ha avviato la routine di distruzione, si utilizzerà l'istruzione "LAST" combinata con il Metodo ".Delete" (purché il Controllo autodistruttivo possegga detto Metodo):

Public Sub NomeGruppoEventi_Click()

 Last.Delete

End