Enumerador de controlos
Para quem está familiarizado com as arrays de objectos do VB6, e os usava para percorrer os controlos do form, o seguinte bloco de código disponibiliza um enumerador de controlos que executa igualmente bem o trabalho, mas para .Net.
'' <summary>
''' Enumerador de controls
''' Codificado por fLaSh
''' carlosferreiracarlos@hotmail.com
''' 17-07-2009
''' </summary>
''' <remarks></remarks>
Module ControlEnum
''' <summary>
''' Enumera todos os controls do Form em uma 'List(Of Control)'
''' PS: está função irá apenas localizar os que estão na primeira 'camada'
''' ou seja, os controls do tipo 'Container', como groupbox, painel, etc..
''' Os restande serão enumerados por a função 'EnumCtrl'..
''' </summary>
''' <param name="oForm">O Form object a enumerar</param>
''' <returns>Lista de controls</returns>
Public Function EnumCtrlForm(ByVal oForm As Form) As List(Of Control)
Dim oCtrl As Control
Dim oCtrlList As New List(Of Control)
' Percorre todos os controls do Form
For Each oCtrl In oForm.Controls
'Egnora caso o control esteje a 'Nothing'
If oCtrl IsNot Nothing Then
'Adiciona o Control a lista
If Not String.IsNullOrEmpty(oCtrl.Name) Then
oCtrlList.Add(oCtrl)
End If
' Verifica se o control é do tipo 'Container'
If oCtrl.Controls.Count > 0 Then
' Como é tipo 'Container', é necessário enumerar os controles contidos..
EnumCtrl(oCtrl, oCtrlList)
End If
End If
Next
Return oCtrlList
End Function
''' <summary>
''' Enumera todos os controles em um determinado control do tipo 'Container'
''' </summary>
''' <param name="oContainer">Objectos com os controles</param>
''' <param name="oCtrlList">A list para adicionar os controls. PS: o parametro está por 'ByRef'</param>
Public Sub EnumCtrl(ByVal oContainer As Control, ByRef oCtrlList As List(Of Control))
Dim oCtrl As Control
For Each oCtrl In oContainer.Controls
'Egnora caso o control esteje a 'Nothing'
If oCtrl IsNot Nothing Then
'Adiciona o Control a lista
If Not String.IsNullOrEmpty(oCtrl.Name) Then
oCtrlList.Add(oCtrl)
End If
' Verifica se o control é do tipo 'Container'
If oCtrl.Controls.Count > 0 Then
' Se o control for do tipo 'SplitContainer', é necessário enumerar os dois paineis contidos..
If TypeOf oCtrl Is SplitContainer Then
EnumCtrl(CType(oCtrl, SplitContainer).Panel1, oCtrlList)
EnumCtrl(CType(oCtrl, SplitContainer).Panel2, oCtrlList)
Else
EnumCtrl(oCtrl, oCtrlList)
End If
End If
End If
Next
End Sub
End Module
Exemplos de utilização
' Exemplo 1
' Enumera todos os controls e mostra o name dos mesmo na jenala 'Immediate Windows' do VS.
For Each oCtrl As Control In EnumCtrlForm(Me)
Debug.WriteLine(TypeName(oCtrl) & " : " & oCtrl.Name)
Next
' Exmeplo 2
' Enumera todos os controls do tipo TextBox e mostra o name dos mesmo na jenala 'Immediate Windows' do VS.
For Each oCtrl As Control In EnumCtrlForm(Me)
Select Case True
Case TypeOf oCtrl Is TextBox
Debug.WriteLine(TypeName(oCtrl) & " : " & oCtrl.Name)
Case TypeOf oCtrl Is Button
' Codigo aqui..
Case TypeOf oCtrl Is GroupBox
' Codigo aqui..
' Etc...
End Select
Next