jueves, 28 de abril de 2011

Impiar los TextBox, listBox y colocar el primer elemento seleccionado de un ComboBox con un Foreach

Bueno este post lo hago por mi amigo Tomate (No voy a decir su nombre ni en que curso está) que dice que no enseñé a usar el foreach.. (además que no cree que el código que le doy funcione.. bueno jejejeje).

Por lo general cuando nos toca limpiar Textbox lo hacemos así...
TextBox1.Text="";
TextBox2.Text="";
etc...
y para CheckBox

Check1.Cheked=false;
Check2.Cheked=false;
Check3.Cheked=false;

y los ComboBox...

CboAlgo.SelectedIndex=0;
CboOtro.SelectedIndex=0;


El problema es que si hay 500 TextBox 200 CheckBox y unos 100 ComboBox será una linea por cada objeto...

Pero, utilizando un ciclo Foreach podemos en pocas lineas podes hacer un codigo que funcione para cualquier cantidad de Controles, ya que recorre los objetos dentro del formulario como elementos en un arreglo... Es importante recordar que el Form es un objeto contenedor, dicho otra forma, que dentro de el, hay otros objetos, pero no es el único.. También esta El GroupBox que contiene objetos dentro de el..

Entonces... .


Aquí tenemos la función que hay que crear dentro del formulario:

private void limpiar(Control Todo_el_Form)
{
foreach (Control oControls in Todo_el_Form.Controls)
{
if (oControls is TextBox)
{
((TextBox)oControls).Text = "";
}

if (oControls is CheckBox)
{
((CheckBox)oControls).Checked = false;
}

if (oControls is ComboBox)
{
((ComboBox)oControls).SelectedIndex = 0;
}

if (oControls.Controls.Count > 0)
{
limpiar(oControls);
}

}

}

En el evento click de algún botón deben llamarla así.
limpiar(this);


La explicación .... Bueno el foreach es un ciclo que se ejecuta la cantidad de veces equivalente a la cantidad de controles en el formulario, dicho de otra forma si hay 10 textBox 20 CheckBox y 20 Label se ejecutará 50 veces, claro para los labels no hará nada solo los saltará.

Dentro del ciclo solo hay 4 if y que es lo que comparan?? los primeros tres evaluan si el control es un TextBox, un CheckBox o un ComboBox (Falta agregar el ListBox) y si son esos tipos de Controles, convierte a la variable que es de tipo Control (o sea un control genérico por decirlo así) al tipo de control específico que necesitamos y se limpia o "resetea" de acuerdo al caso.

Lo interesante es, que si colocamos un Tab o un GroupBox, al igual que el Form, estos son controles contenedores, dicho de otra forma, dentro de un control hay otro control o muchos, dependiendo el caso, entonces se hace un if y se evalúa si contiene mas controles se vuelve a llamar la misma función dentro de ella pero esta vez el argumento cambia ya no son todos los controles del formulario si nó solo el control que contiene mas controles. A este proceso se le llama recursión hacer que dentro de una función se invoque ella misma.


El ejercicio resuelto lo pueden descargar desde aquí



A la espera de comentarios.

2 comentarios:

  1. Yo de nuevo .. en peticion
    Porque no explica sobre los texbox junto con la base de datos de mysql..
    para agregar los datos de los texbox ala DB de mysql.. Saludos desde Tabasco.

    ResponderEliminar
  2. Me fue de mucha ayuda, muchas gracias.

    ResponderEliminar