Quiero compartir con ustedes un ejemplo sobre recursividad en Controles. Debo de ser sincero y decir que muchas veces para limpiar el contenido de diferentes controles (TextBox, CheckBox, etc.) he utilizado el típico borrado individual como:
TextBox1.text ="""
CheckBox.value=False
...etc.
Me preguntaba en algún momento, que pasaría si tuviese un centenar de controles textBox en una aplicación grande... Uhmm tendría que hacerlo uno a uno, podría ser buena idea pero sería algo que me haría perder el tiempo y no sería a la vez lo más optimo.
Es por ello que la codificación que presento es un ejemplo desarrollado por el docente Luis Dueñas Huaroto de quien tuve la oportunidad de aprender muchas cosas que actualmente no enseñan en institutos ni universidades del País.
Bueno el ejemplo es el siguiente y lo pueden ver desde la página del Autor en WinForms - Recursividad en Controles espero lo prueben y comenten que tal les fue.
Ejemplo
Usando la colección controls podemos crear una función genérica que haga dicha labor, pero si el control fuese un contenedor como un GroupBox, Panel, TabControl, etc, necesitamos crear una función Recursiva para recorrer todos los controles incluyendo los contenedores.
Aquí les presento una función recursiva que limpia los controles TextBox, RadioButton y CheckBox de cualquier contenedor.
Por ejemplo sobre un formulario agregar:
- 2 Label
- 2 TextBox
- 2 RadioButton
- 2 CheckBox, luego copiarlos a memoria, agregar un GroupBox y un Panel y pegarlos en ambos.
Finalmente agregar un Botón y en el evento click llamar a la función controladora:
private void limpiarControles(object sender, EventArgs e)
{
borrarContenidoControles(this);
}
private void borrarContenidoControles(Control contenedor)
{
foreach (Control control in contenedor.Controls)
{
if (control.Controls.Count > 0) borrarContenidoControles(control);
else
{
if (control is TextBox) ((TextBox)control).Clear();
if (control is RadioButton) ((RadioButton)control).Checked = false;
if (control is CheckBox) ((CheckBox)control).Checked=false;
}
}
}
{
borrarContenidoControles(this);
}
private void borrarContenidoControles(Control contenedor)
{
foreach (Control control in contenedor.Controls)
{
if (control.Controls.Count > 0) borrarContenidoControles(control);
else
{
if (control is TextBox) ((TextBox)control).Clear();
if (control is RadioButton) ((RadioButton)control).Checked = false;
if (control is CheckBox) ((CheckBox)control).Checked=false;
}
}
}
Hola camarada quiziera que puedas colgar link o archivos sobre el visual net.
ResponderEliminargracias!
Gracias amigo por visitar el Blog, tomaré en cuenta tu recomendación para las próximas publicaciones
EliminarHola juanki. Me gustaría ver aplicaciones con base de datos.
ResponderEliminarExcelente función, justo lo que necesitaba.
ResponderEliminar- J.Rodríguez
Excelente Código...
ResponderEliminarpara Vb.net. tuve un pequeño problemita. usé nuevas variables.-
If TypeOf control Is TextBox Then Dim txt As TextBox = CType(control, TextBox) : txt.Clear()