sábado, marzo 05, 2011

Reutilizar eventos en Csharp

Muchas veces los eventos de cada formulario en una aplicación MDI repiten el mismo código, por ejemplo si queremos que se abra una ventana de ayuda al presionar F1 debemos repetir el mismo código en el evento KeyDown de todos los formularios y programar la llamada a la ventana de ayuda.

Para simplificar estos temas y reutilizar código podemos optar en crear solo una función que llame a la ventana de ayuda y se ejecute cada vez que el usuario presione F1.

El siguiente ejemplo tiene un formulario MDI y dos formularios hijos, donde cada vez que se presione la tecla F1 en los formularios hijos muestre un mensaje, ademas, en la parte inferior del formulario MDI debe mostrar el nombre del formulario hijo actual.

En el formulario MDI programamos la función que abre a los formularios hijos y se asigna los eventos Activated y KeyDown para los resultados que deseamos conseguir.


//Funciones Generales

//Abrir los formularios hijos
private void fOpenWindows(Form value)
{
value.MdiParent = this;
value.Show();
//Para que los eventos de teclado se apliquen a todo el formulario
value.KeyPreview = true;
//Reutilizamos el evento activate en el formulario que vamos a abrir
value.Activated += new System.EventHandler(EvtActivate_Activated);
//Reutilizamos el evento KeyDown en el formulario que vamos a abrir
value.KeyDown += new KeyEventHandler(EvtKeyDown_KeyDown);
this.tslNomFormularioActivo.Text = value.Text;
}

//Mostrar el nombre del formulario activo
private void EvtActivate_Activated(Object sender, EventArgs e)
{
//Mostrar el nombre del formulario Activo en la parte
//inferior del MDI
this.tslNomFormularioActivo.Text = ((Form)sender).Text;
}


//Tecla presionada por el usuario
private void EvtKeyDown_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//Mostrar un mensaje cuando se presione F1
if (e.KeyCode == Keys.F1)
{
MessageBox.Show("Usted presionó la tecla F1");
}
//Mostrar un mensaje cuando se presione F2
else if (e.KeyCode == Keys.F5)
{
MessageBox.Show("Usted presionó la tecla F5");
}
//Cuando se presione teclas combinadas que usen Ctrl + {tecla}
else if (e.Control == true)
{
//cuando el usuario presiona Ctrl + C mostrar un mensaje
if (e.KeyCode == Keys.C)
{
MessageBox.Show("Usted presionó la combinación de teclas Ctrl + C");
}
//cuando el usuario presiona Ctrl + V mostrar un mensaje
else if (e.KeyCode == Keys.V)
{
MessageBox.Show("Usted presionó la combinación de teclas Ctrl + V");
}

}
}


Código para abrir los dos formularios hijos.


private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 wOpen = new Form1();
fOpenWindows(wOpen);
}

private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 wOpen = new Form2();
fOpenWindows(wOpen);
}


La lógica nos sirve tanto en aplicaciones de escritorio y aplicaciones web. En Asp.Net tambien podemos reutilizar eventos.

Como vemos no se ha programado nada en los dos formularios hijos, logrando de esta manera reducir el código de nuestra aplicación.

No hay comentarios.: