miércoles, octubre 12, 2005

Como recorrer los controles de una forma en vb.NET

Haciendo un sistema me encontraba con el problema de tener un formulario con muchisimos campos los cuales tenia que estar limpiando y llenando con diferentes datos cada vez que ejecutaba una acción en el formulario, setear los valores uno por uno hubiese sido un gran dolor de cabeza por lo que decidí crear una función recursiva que me manipulara todos los controles de la forma, en esta ocasión pondré solamente el código que limpia los controles:

Private Sub LimpiarControles(ByVal Lista As Control)
Dim myControl As Control, i As Integer

For Each myControl In Lista.Controls
'Verificamos si el control es un TextBox
If (TypeOf (myControl) Is TextBox) Then
CType(myControl, TextBox).Text = ""
End If

If (TypeOf (myControl) Is DropDownList) Then
CType(myControl, DropDownList).SelectedIndex = 0
End If

If (TypeOf (myControl) Is RadioButtonList) Then
For i = 0 To CType(myControl, RadioButtonList).Items.Count - 1
CType(myControl, RadioButtonList).Items(i).Selected = False
Next
End If
If (TypeOf (myControl) Is CheckBoxList) Then
For i = 0 To CType(myControl, CheckBoxList).Items.Count - 1
CType(myControl, CheckBoxList).Items(i).Selected = False
Next
End If

If (TypeOf (myControl) Is eWorld.UI.CalendarPopup) Then
CType(myControl, eWorld.UI.CalendarPopup).Clear()
End If

If (TypeOf (myControl) Is DataGrid) Then
CType(myControl, DataGrid).Controls.Clear()
End If
LimpiarControles(myControl)
Next
End Sub

y por ultimo para llamar la función lo hacemos asi: LimpiarControles(Page) donde el parámetro "Page" contiene todos los controles de la página.

El código está recursivo debido a que se da el caso que si hay una tabla dentro de otra tabla, solo recorre los controles que están al primer nivel, dejando fuera los demás es por eso que hay que hacerla recursiva para que recorra absolutamente todos los controles de la forma.