C sharp - MANEJO DE EVENTOS

 
Vista:

MANEJO DE EVENTOS

Publicado por Artista (1 intervención) el 18/09/2006 07:59:14
Hola, mi consulta es la siguiente... Necesito enviar un evento desde una clase hacia un formulario que me indique que tengo que lanzar un MessegeBox presionando un botón. Es decir, quiero manejar Código del formulario mediante un evento de mi clase¿Como hago?

Gracias por su atención
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:MANEJO DE EVENTOS

Publicado por fisa (87 intervenciones) el 18/09/2006 14:51:47
Lo que queres hacer no es tan sencillo, pero voy a intentar ayudarte.
Es muy teorico y abstracto, por ahi se va a hacer dificil explicarlo por escrito...

Lo primero que tenes que hacer es definir un tipo de delegado que coincida con los parametros que va a tener tu evento.

public delegate void DelegadoMiEvento(object sender, ParametrosMios e);

Fijate, en el ejemplo, el delegado es DelegadoMiEvento. Lo que ahi definis es que tipo de parametros va a llevar ese delegado. Viste que cuando pones codigo para un evento determinado, el metodo que te arma tiene parametros (objet sender, xxxxxx e, ...)?, bueno, aca definiste que parametros van a tener los metodos que manejen el evento que va a tener tu clase.
Fijate que en el ejemplo, use un tipo de dato ParametrosMios. Eso es un tipo de dato que defini aparte, que contiene los datos para el evento. Eso no es algo obligatorio, podrias simplemente usar todos parametros con tipos de datos ya conocidos, pero es muy recomendable, y ademas sigue con las costumbres de microsoft (si ellos lo dicen... jeje). Mas adelante te explico como definirlo.

Despues de esto, tenes que definir el evento propiamente dicho, usando tu delegado.
Esto se hace asi:

public event DelegadoMiEvento MiEvento;

El evento de tu clase entonces se va a llamar MiEvento.
Con esto, ya tendrias tu evento listo para usar, pero ademas tendrias que hacer dos cosas:
1) definir el tipo de dato ParametrosMios
2) en algun lugar, lanzar el evento

Lo primero: definir el tipo de datos ParametrosMios. Lo mas recomendable es que lo hagas como una clase, que se deriva de la System.EventArgs. Esto esta especialmente diseñado para usarse como parametros de eventos, por eso conviene.
Lo harias asi:

public class ParametrosMios: System.EventArgs
{
private string STRdatomio1;

public string DatoMio1
{
get { return STRdatomio1; }
set { STRdatomio1= value; }
}

private int INTdatomio2;

public int DatoMio2
{
get { return INTdatomio2; }
set { INTdatomio2 = value; }
}

}

Si miras el ejemplo, vas a ver que la clase tiene dos datos, un string y un integer.
Veamos devuelta un ejemplo comun. El evento KeyPress de un TextBox, viste que cuando arma el metodo para manejar el evento (donde vos escribis el codigo) tenes un parametro que viene como "e", que posee datos como KeyCode.
Dentro del metodo que uses para manejar el KeyPress, vas a siempre tener el e.KeyCode, que te va a dar el valor de la tecla presionada.
Bueno, aca estamos haciendo eso, definiendo los datos que el evento va a pasarle al metodo para que use. En este caso, "e" va a tener los datos "DatoMio1" y "DatoMio2".
Eso mismo lo hicimos en el Deledago, cuando pusimos que los metodos iban a tener dos tipos de datos, el object sender, y el ParametrosMios e. Vos podrias preguntar por que no hicimos directamente un delegado que tenga todos los datos (el string, el integer, bla bla bla).
Esto es asi para que sea un metodo "estandar", compatible con otros eventos. Si te fijas, todos los eventos comunes tienen solo dos parametro, el sender y el eventargs (este ultimo cambia de tipo, pero siempre se hereda de System.EventArgs)
Bueno, con todo esto, tenemos entonces el evento "MiEvento" en tu clase, que cuando se ejecute va a pasar como parametros un object llamado sender, y ademas un objeto del tipo ParametrosMios llamado e.
Pero el punto 2) era que en algun lado tenemos que lanzar el evento.
Eso es facil.
Por ejemplo, dentro de tu clase tenes el metodo "MiMetodo", que es el que va a tener que lanzar el evento. Entonces harias asi:

private void MiMetodo()
{
ParametrosMios PARAMSe = new ParametrosMios();
PARAMSe.DatoMio1 = "hola";
PARAMSe.DatoMio2 = 10;
try
{
MiEvento(this, PARAMSe);
}
catch { }
}
}
}

En este ejemplo, fijate que antes de lanzar el evento, definimos un objeto (PARAMSe) del tipo ParametrosMios, y le pusimos los datos necesarios.
Otra cosa, siempre usa un try catch, para que si nunca manejaste el evento, no tire error. Eso es cuestion de gustos, podes no hacerlo.

Bueno, con todo esto tenes entonces tu clase con tu evento listos para usarse.

Ahora, en mi programa, dirias, como uso el evento? Como hago que cuando se ejecute el evento de mi clase haga algo?
Simple, le asignas al objeto de tu clase, un manejador de eventos.
Supongamos que tu clase se llamaba ClaseXX, en tu formulario tendrias que poner (obviamente hay cosas que van a depender de tu clase, fijate):

ClaseXX MiClase = new ClaseXX();
MiClase.MiEvento += new MiProyecto.ClaseXX.DelegadoMiEvento(this.MiMetodoManejador);

Y tendrias que tener definido en alguna parte tu metodo manejador:

public void MiMetodoManejador(object sender, MiProyecto.ClaseXX.ParametrosMios e)
{
MessageBox.Show(e.DatoMio1 + e.DatoMio2.ToString());
}

Con esto, cada vez que se lance tu evento va a mostrar un msgbox que diga el texto mas el numero que pasaste como parametros del evento en los DatosMio 1 y 2.

Bueno, con eso estaria
Una aclaracion: la clase ParametrosMios tiene que estar DENTRO de la clase tuya.

Espero que entiendas este quilombo, y cualquier duda, simplemente pregunta, no hay drama.
Suerte!
Bye!

Fisa
Correo: [email protected]
MSN: [email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar