Está en la página 1de 5

MSc.

Luis Benavides Sellan – C# Reutilizando Código entre Controles – Usando la clase controls para crear procedimientos
masivos para controles

C# Utilizando la clase controls para crear procedimientos masivos para controles


En esta sesión conoceremos como aprovechar la clase controls para crear procedimientos para ejecutar acciones simultaneas
sobre controles en C#

Ejemplo de aplicación

En el siguiente formulario crearemos un procedimiento de usuario que nos permita validar que
en todos los comboBox se halla seleccionado una opción diferente a 0, en este caso la opción 0
es la que hemos predeterminado en el evento load

En el evento load del form asignaremos como valor inicial a todos los ComboBox la opción 0
(Seleccione)

private void FrmRegistro_Load(object sender, EventArgs e)


{
short edad=(short)0;
this.timer1.Enabled = true;
//Poner los combobox en la opción 0 Seleccione
this.CboCA.SelectedIndex = 0;
this.CboNivel.SelectedIndex = 0;
this.CboTipoId.SelectedIndex = 0;
this.CboSA.SelectedIndex = 0;
//Dar a la fecha de nacimiento un valor inicial de 01-01-2000

1
MSc. Luis Benavides Sellan – C# Reutilizando Código entre Controles – Usando la clase controls para crear procedimientos
masivos para controles

this.DtpFechaNac.Value = new DateTime(2000, 01, 01);


//Calcular edad
edad = (short)Estudiante.ObtieneEdad(this.DtpFechaNac.Value);

Luego crearemos una función que nos devolverá el valor de true si se supera la validación y de
false si no se supera la validación:
//Crear procedimiento generico para validar si se ingreso datos a un ComboBox
private bool ValidarCombo(ComboBox ComboEvaluado)
{
//Preguntar si no se selecciono ninguna opción (0 = Seleccione)
if (ComboEvaluado.SelectedIndex == 0)
{
this.errorProvider1.SetError(ComboEvaluado, "Debe seleccionar " + ComboEvaluado.Tag);
return false; //Devolvemos falso en caso de error
}
//En caso de no haber error limpiamos el control errorProvider
this.errorProvider1.SetError(ComboEvaluado, "");
return true; //Devolvemos verdadero si fue correcto
}

A continuación, en el evento Validating de cada Combobox invocamos el procedimiento de validación

private void CboTipoId_Validating(object sender, CancelEventArgs e)


{
this.ValidarCombo(CboTipoId);

private void CboNivel_Validating(object sender, CancelEventArgs e)


{
this.ValidarCombo(CboNivel);
}

private void CboCA_Validating(object sender, CancelEventArgs e)


{
this.ValidarCombo(CboCA);
}

2
MSc. Luis Benavides Sellan – C# Reutilizando Código entre Controles – Usando la clase controls para crear procedimientos
masivos para controles

Reutilizando el código del evento de otro control

Cuando dos o más controles comparten exactamente el mismo código en común que se dispara
en el mismo evento es posible asignar el manejo del evento de un control a partir de otro. Esto
nos permite ahorrar líneas de código, por consiguiente, nuestro programa final será más
entendible.

En el caso de este formulario


tanto el textbox de nombres
como el de apellidos
requieren ser validados para
que únicamente acepten
letras, espacios y la tecla
retroceso, esto se validara en
el evento KeyPress por lo
tanto solo necesito codificar
el evento KeyPress de uno de
ellos.

1. Generamos el evento KeyPress del textbox para nombres

3
MSc. Luis Benavides Sellan – C# Reutilizando Código entre Controles – Usando la clase controls para crear procedimientos
masivos para controles

2. Lo codificamos
private void TxtNombres_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsLetter(e.KeyChar) || Char.IsWhiteSpace(e.KeyChar)
|| Char.IsControl(e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
}

3. Seleccionamos el textbox de apellidos y buscamos en la ventana de propiedades su evento


KeyPress, en lugar de darle doble clic para generar un nuevo procedimiento seleccionamos de
la lista desplegable el procedimiento KeyPress de TxtNombres

4
MSc. Luis Benavides Sellan – C# Reutilizando Código entre Controles – Usando la clase controls para crear procedimientos
masivos para controles

Con esto cada vez que se


pulse una tecla sobre el
control TxtApellidos se
invocará al evento KeyPress
de TxtNombres.

También podría gustarte