Re: Como Lanzar Un Evento Desde Una Clase?
Hola
Los eventos pueden parecer métodos, pero no lo son. Los métodos son funciones públicas que están en una clase y a las cuales tu puedes llamar cuando quieras como a cualquier otra función.
Los eventos no son funciones. Solo son señales. Para que funcionen hay que enlaza la señal al objeto y el nombre del evento será el nombre del objeto y luego un guión y luego el nombre del evento.. El evento keypress no es nada por sí mismo. Es algo concreto el evento textbox1_keypress. Osea que un evento para que funcione tiene que estar ligado a un objeto y tiene que tener un observador que a menos que especifiques otro será el observer del formulario. El código de lo que ese evento hace va en el lugar donde esté el observador que a menos que especifiques otra cosa será en el formulario.
Tu puedes crear un evento en una clase, pero si no lo enlazas con algún objeto no funcionará. Para ello dispones de object.attach que enlaza un objeto con su observador y object.detach que lo desenlaza.
En definitiva tu puedes hacer
Objecto = NEW MiClase
Objeto.Attach(Objeto, ME, "Nombre_Observador")
Que es lo mismo que
Objeto=NEW MiClase as "Nombre_Observador"
Una vez enlazado el nombre del evento en el form (o donde esté el observer) será NombreObjeto_NombreEvento
Imaginemos que deseamos crear un inexistente evento keypress para una clase textbox. El código que tu tienes en la clase es
event keypress(param1, param2, ..., paramN)
Con lo cual has definido un evento keypress en una clase textbox. Ahora ya existe así que cuando creas la clase en el formulario ya puedes llamarlo. El código de ese evento va donde el observador esté.
En el formulario tienes
private sub MiTextBox_Keypress(param1 as integer, param2 as integer, paramN as integer)
...
end[/code]
Tienes que entender que el evento no es una función (como si lo es un método). Un evento solo es una señal o disparador. Para que funcione tiene que estar enlazado a un observador de eventos. Por lo general será el del formulario donde esté el objeto pero tu puedes crear otro observador distinto para ese objeto.
La clase Observer