miércoles, 28 de mayo de 2014

WinForms - Recursividad en Controles en C# .Net

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

Es común tener Pantallas de Ingreso de Datos con muchos controles, los cuales necesitamos limpiar para realizar un nuevo ingreso, la forma trabajosa de ejecutar este requerimiento seria borrar uno por uno, si son muchos nos demoraríamos demasiado.



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;
         }
    }
}

5 comentarios:

  1. Hola camarada quiziera que puedas colgar link o archivos sobre el visual net.
    gracias!

    ResponderEliminar
    Respuestas
    1. Gracias amigo por visitar el Blog, tomaré en cuenta tu recomendación para las próximas publicaciones

      Eliminar
  2. Hola juanki. Me gustaría ver aplicaciones con base de datos.

    ResponderEliminar
  3. Excelente función, justo lo que necesitaba.

    - J.Rodríguez

    ResponderEliminar
  4. Excelente Código...
    para 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()

    ResponderEliminar