A veces tenemos que modificar determinada propiedad con el mismo valor para muchos controles (Web controls, winforms controls, etc…), para hacer esto tenemos que escribir una linea por cada control que queremos cambiar
esto se veria masomenos asi
control1.property = value;
control2.property = value;
control3.property = value;
...
controln.property = value;
donde control# es el nombre del control, property es la propiedad que queremos setear y value es el valor que queremos poner en property…
Si son un poco inteligentes pueden hacer algo como esto:
foreach(Control ctrl in Container.Controls)
{
if(ctrl.GetType() == typeof(TextBox))
((TextBox)ctrl).Text = "";
if(ctrl.GetType() == typeof(ComboBox))
((ComboBox)ctrl).SelectedIndex = -1;
if(ctrl.GetType() == typeof(CheckBox))
((CheckBox)ctrl).Checked = false;
if(ctrl.GetType() == typeof(Label))
((Label)ctrl).Text = "";
if(ctrl.GetType() == typeof(DateTimePicker))
((DateTimePicker)ctrl).Text = "";
}
Funciona, pero puede hacerce mejor, podemos obtener mayor flexibilidad y elegancia con el siguiente procedimiento
public static void SetUpProperty(IEnumerator Controls, string type, string prop, object value)
{
while(Controls.MoveNext())
{
Control c = (Control)Controls.Current;
if (type.Equals("TextBox") && c is TextBox)
{
if (prop.Equals("Text"))
{
((TextBox)c).Text = value.ToString();
}
}
if (type.Equals("DropDownList") && c is DropDownList)
{
if (prop.Equals("SelectedIndex"))
{
((DropDownList)c).SelectedIndex = (int)value;
}
if (c.HasControls())
{
SetUpProperty(c.Controls.GetEnumerator(), type, prop, value);
}
}
}
}
IEnumerator Controls(Enumeracion con los controles que queremos setear (podemos obtenerlo con esta funcion contenedor.Controls.getEnumerator()))
string type(bandera que nos indica el tipo de control a modificar, esto para discriminar entre TextBoxes y DropDownLists)
string property(Bandera con el nombre de la propiedad que queremos modificar)
object value(Valor que queremos poner en Property [tengan cuidado para que no de error, o metan todo entre un try])
Si este metodo lo ponen en una clase podran llamarlo desde cualquier lado sin tener que hacer instacia de la clase que lo contiene, ya que el modificador de acceso es static....
Estoy seguro que se puede mejorar... si alguien tiene idea de como por favor dejar su comentario...