martes, 19 de junio de 2007 10:11
por
Pedro
Asociar el evento de un control hijo al contenedor padre.
Es típico tener controles personalizados en nuestras aplicaciones, estos controles normalmente estan compuestos de una serie de elementos los cuales permiten tratar sus eventos asociando un método que se ejecutará cuando el evento se dispare.
Este método debe estar dentro del ámbito del control personalizado de modo que cuando utilicemos nuestro control en aplicaciones que desarrollemos no podremos modificar el código asociado a los eventos de los elementos hijos de dicho control.
En este post explicaré una forma sencilla de solucionar este problema.
El ejemplo que pretendo mostrar consta de lo siguiente: un proyecto windows form donde tendremos en nuestro formulario principal un control personalizado, el control personalizado consta de un simple botón. Se pretende que desde el código del formulario principal podamos asociar código que se ejecutará cuando se dispare por ejemplo el evento de Click del botón que contiene el control personalizado.
Los pasos a seguir con los siguientes:
- Nos creamos un proyecto de Windows Form.
- Añadimos sobre la solución un Control de usuario llamado MiControl.
- Al control de usuario le añadimos un botón llamado MiControl.
- Seleccionamos el botón y en el cuadro de propiedades dentro de eventos hacemos doble click en el evento Click, de este modo le asociamos un método a dicho evento.
- Añadimos el código siguiente:
//Declaramos un delegado para el evento de clickado.
public delegate void ClickEventHandler(object sender, System.EventArgs e);
//Asociamos el evento a una categoria, en concreto a la categoria Action
[Category("Action")]
//Descripcion del evento
[Description("Ocurre cuando se clicka sobre el boton MiBoton.")]
//Asignamos al delegado el nombre del método que responderá al evento fuera del control de usuario
public event ClickEventHandler Click_boton_interno;
//Método que responde al evento de click dentro del control de usuario
private void MiBoton_Click(object sender, EventArgs e)
{
//Comprueba que desde fuera del control se ha añadido el evento.
if (Click_boton_interno != null)
{
Application.DoEvents();
Click_boton_interno(this, e);
}
}
- A continuación si añadimos un nuevo elemento del control personalizado MiControl en el formulario principal veremos que en dicho elemento aparece un nuevo evento disponible llamado Clic_boton_interno. Si hacemos doble clic sobre el nos creará un método asociado a dicho evento todo este ya en el ámbito del formulario principal de este modo ya podemos tratar dicho evento desde ahí fuera.
private void miControl1_Click_boton_interno(object sender, EventArgs e)
{
MessageBox.Show("Se ha pulsado el boton que hay dentro de MiControl");
}
