Qui di seguito una semplice funzione che permette di recuperare tutti i controlli contenuti in un determinato contenitore.
Il risultato della funzione sarà un array dei controlli contenuti in un determinato contenitore. Nel caso in cui uno dei controlli sia lui stesso un contenitore, quindi che la collection .controls non sia vuota, di default la funzione procederà in modo ricursivo all'interno della collection stessa.
La funziona richiede il parametro obbligatorio myCont che, ovviamente, rappresenta il contenitore su cui effettuare la ricerca, form compreso.
Il parametro IncludeSubContainer, se impostato a False, permetterà di recuperare solo i controlli direttamente contenuti nel contenitore e non l'intero insieme. Di default il suo valore è True.
Ultimo parametro è l'array di controlli ctr() che viene utilizzato per iterare all'interno di subControls, ma che permette anche di poter ottenere un array di controlli da due o più contenitori, come spiegato nell'esempio n.2.
Friend Function getControls(ByRef myCont As Control, Optional ByVal IncludeSubContainer As Boolean = True, Optional ByRef ctr() As Control = Nothing) As Control()
'***********************************************************************************
'Func.: getControl (Creazione SB 20080707; Mod.: )
'Desc.: Restituisce un array dei controlli contenuti in un determinato contenitore
'
'Par. : myCont Control rappresentante il contenitore da cui partire a ricercare.
'[IncludeSubContainer] Opzionale. Boolean indicante se si vuole procedere in modo ricursivo all'interno
' di tutti i controlli contenitore a partite da myCont.
'[ctr()] Opzionale. Array di controlli già esistente.
'Ret. : Control() Array di controlli
'***********************************************************************************
For Each obj As Control In myCont.Controls
If obj.Controls.Count > 0 AndAlso IncludeSubContainer Then
Call getControls(myCont:=obj, ctr:=ctr)
End If
If ctr Is Nothing Then
ReDim ctr(0)
Else
ReDim Preserve ctr(UBound(ctr) + 1)
End If
ctr(UBound(ctr)) = obj
Next
Return ctr
End Function
'
' Esempio n.1
' Scorro tutti i controlli contenuti nel form e ne riporto il nome e il nome del proprio parent all'interno di TextBox1
'
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = ""
For Each ctr As Control In getControls(Me)
TextBox1.Text = String.Concat(TextBox1.Text, ctr.Name, "-", ctr.Parent.Name, vbCrLf)
Next
End Sub
'
' Esempio n.2
' Vengono restituiti i controlli appartenenti a due contenitori e più precisamente di un ipotetico TabControl e di un Panel
'
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim theCtr() As Control = Nothing
theCtr = getControls(TabControl1, False)
theCtr = getControls(Panel1, False, theCtr)
TextBox1.Text = ""
For Each ctr As Control In theCtr
TextBox1.Text = String.Concat(TextBox1.Text, ctr.Name, "-", ctr.Parent.Name, vbCrLf)
Next
End Sub