C sharp - Clase static y eventos!!!

 
Vista:

Clase static y eventos!!!

Publicado por Emiliano (43 intervenciones) el 04/12/2006 23:58:34
Hola a todos, necesito que por favor me orienten un poco. Necesito crear una clase static, que genere eventos y estos eventos ser consumidos desde otro lado, como por ejemplo desde un formulario. Es decir, desde un formulario atrapar los eventos que esta clase estatica genere.
Espero que se haya entendido y puedan ayudarme. Es importantisimo para mí y se los voy a agradecer.

Slds. Emiliano
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:Clase static y eventos!!!

Publicado por fisa (87 intervenciones) el 05/12/2006 12:52:48
Para que una clase sea estatica, simplemente tenes que poner antes del nombre la palabra "static", y lo mismo tenes que hacer para los metodos que queres que sean estaticos:

static public class MiClase
{
static public void MiMetodo()
{
}
}

Pero supongo que lo que queres saber bien es como crear tus propios eventos. No es complicado, te explico:

Primero tenes que crear un delegado, que es una definicion de los parametros que va a tener el evento. Cuando un evento se genera, pasa ciertos parametros a los metodos que van a manejar el evento, esos parametros se definien en delegados.
Se hace asi:

public delegate void MiDelegado(string parametro1, int parametro2);

(Yo puse esos dos parametros como ejemplo, pero podes poner los que quieras)
Una cuestion a tener en cuenta, es que tenes que definir bien los parametros para que tu evento pueda devolver toda la informacion referida a lo que sucedio.
Un estandar es usar solamente dos:
- un object llamado "sender", que representara la entidad (objeto) que genero el evento
- un objeto llamado "e", de una clase que creas vos heredando la System.EventArgs
Esa clase derivada de System.EventArgs es para que despues los metodos manejadores de tu evento sean compatible con metodos manejadores de eventos de controles estandar de windows, entre otras cosas (no parece gran cosa, pero mas de una vez es algo hasta obligatorio).
Entoces, dentro de tu clase, tendrias definida otra clase asi:

public class MisParametros : System.EventArgs
{
public string MiDato1;
public int MiDato2;
public double MiDato3;
}

Dentro de esa clase meterias todos los datos que tu evento va a devolver, y despues simplemente definis el delegado asi:

public delegate void MiDelegado(object sender, MisParametros e);

Despues de definir el delegado, sea estandar o no, tenes que definir un evento que adhiera al formato de ese delegado. Esto lo haces asi:

public event MiDelegado MiEvento;

Con eso, tu clase ya tiene un evento creado, pero nunca se dispara. Dentro de tu clase, en el momento que tengas que disparar el evento (dentro de algun metodo) vas a tener que poner esto:

try
{
MiEvento("valores parametros", 1);
}
catch { }

Fijate dos cosas:
1) esta en un bloque try catch. Hacelo siempre, porque si no le asignaste ningun manejador entonces va a tirar un error.
2) Si usaste el estandar de usar los parametros como sender y e, tendrias que hacer esto:

MisParametros NuevoE = new MisParametros();
NuevoE.MiDato1 = "valor 1";
NuevoE.MiDato2 = 2;
NuevoE.MiDato3 = 4.5;
try
{
MiEvento(this, NuevoE);
}
catch { }

(El "this", si no lo sabes, es para hacer referencia a tu clase, que es desde donde se genero el evento)
Nunca lo probe para clases estaticas, pero en teoria deberia funcionar igual que con clases comunes. Si no funciona decime, y me fijo que hay que cambiar.
Espero haber ayudado. Suerte.
Chau

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

RE:Clase static y eventos!!!

Publicado por Emiliano (43 intervenciones) el 05/12/2006 20:27:28
Fisa, desde ya te agradezco la ayuda. Voy a probar esto y te aviso como me fue. Mi inconveniente para ser mas especifico es que tengo una aplicacion movil que tiene formularios de varios niveles, es decir un formulario que invoca otro formulario y este invoca a un nuevo formulario. A su vez la aplicacion debe escuchar un puerto RS232 pero los valores obtenidos en cada formulario deben asignarse a controles de sus respectivos formularios. Mi inconveniente es que habro el puerto RS232 en el primer formulario y cuando paso al segundo formulario los datos son leidos y colocados en los formularios del primer nivel...eso esta mal!!!!..por eso pense en alguna clase estatica que siempre leea el dato y me genere un evento el cual yo pueda acceder a ese valor desde cualquier formulario.
Se entiend?
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

RE:Clase static y eventos!!!

Publicado por matias (1 intervención) el 08/02/2007 14:02:57
excelente la explicacion de juan pedro, lo voy a guardar para cuando lo necesite
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