Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Como Lanzar Un Evento Desde Una Clase?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Como Lanzar Un Evento Desde Una Clase? 
 
Hola amigos, feliz año para todos!

Tengo un problema, estoy intentando que una clase pueda lanzar un evento.

Para ser mas claro:

Tengo una clase llamada A

PUBLIC SUB validar()
      RAISE mal()
END

EVENT mal()


Dentro de un form creo una instancia de la clase A

Public var as A

PUBLIC SUB Form_Open()
 var = NEW A
 var.validar
END

PUBLIC SUB var_mal()
Message.Info("OK")
END SUB


Pero no funciona, el evento var_mal nunca se dispara y la orden raise mal si la ejecuta.

Necesito comprender bien esto de los eventos para continuar, que es lo que hago mal?
 



 
última edición por mil_arg el Viernes, 01 Enero 2010, 22:59; editado 1 vez 
mil_arg - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
Dim MiTextBox as new textbox(ME) 'el observador será ME
raise MiTextBox.keypress(param1, param2, paramN, ...)


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
 



 
última edición por soplo el Sabado, 02 Enero 2010, 10:45; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Lanzar Un Evento Desde Una Clase? 
 
Gracias amigo, al final deje de lado la idea de lanzar eventos. Preferi sentarme con lapiz y papel y diseñar bien las clases.Y anoche ya tenia todo funcionando. Con propiedades y metodos bien diseñados todo es posible de hacer, solo que pensé que lanzar un evento haría las cosas mas fáciles, creo que los eventos son para controles y no tendría que haber intentado usarlos.

Igualmente a partir de tu ayuda intente en un nuevo proyecto aprender sobre el tema pero tampoco salio. Creo que mi clase debería heredar de alguna otra para disponer del método attach. De todos modos lo dejare para investigar cuando vuelva a surgir la necesidad de lanzar eventos.

Muchas gracias!
 



 
mil_arg - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Lanzar Un Evento Desde Una Clase? 
 
Son los objetos los que se attachan.

Dim Objeto as MiClase 'crear un objeto de tipo 'MiClase'
Dim MiTextBox as Textbox 'crear un objeto de tipo textbox

MitextBox=new textbox
MiTExtBox.attach(MiTExtBox,ME,"Obs_Textbox"

Objecto = NEW MiClase
Objeto.Attach(Objeto, ME, "Nombre_Observador")

Public sub Obs_Textbox_keypress()
...
End


Si en la clase MiClase tienes definido un evento entonces también puedes hacer esto para programar el evento del objeto:

Public Sub Nombre_Observador_MiEvento()
...
End


Y ya por último a efectos de compresión hagamos una clase que partiendo de un textbox le añada una nueva propiedad tipo de tipo boleano
inherits textbox 'heredo de textbox
property tipo as boolean 'crear la propiedad
private $Tipo as boolean 'la variable que usaré para conocer el valor de la propiedad

private function tipo_read() as boolean 'la función que devuelve el valor de la propiedad cuando quieres leerlo
return $tipo
end

private sub tipo_write(value as boolean) 'la función que se usa cuanto tu le des un valor a la propiedad
$tipo=value
end


Con una clase como esta a la que llamo MTextBox lo que puedo hacer es
Dim MiTextBox as new MTextBox(ME) 'crear un textbox en el formulario actual con todas las cualidades de un textbox pero además con la propiedad tipo. Por ejemplo

Lo que hace esa clase es heredar textbox y añade una propiedad mas. Ahora puedes hacer en todo tu proyecto cosas como esta si declaras un textbox de clase MTextBox

MiTextBox.width=X
MiTextBox.Height=X
MiTextBox.Tipo=false
MiTextBox.top=X
MiTextBox.Left=X
private sub MiTextBox_Keypress()
...
end

Todo funciona igual solo que esos textboxes tienen además la propiedad boleana tipo.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Como Lanzar Un Evento Desde Una Clase? 
 
Gracias Soplo esta perfecto! Fue mi error querer utilizar eventos, en mi caso no eran necesarios. Gracias una vez mas!
 



 
mil_arg - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Evento Desde Otro Ejecutable campanillas General 16 Sabado, 12 Diciembre 2009, 19:54 Ver último mensaje
campanillas
No hay nuevos mensajes Lanzar Un Evento Desde Una Clase Definida ... santijav General 3 Sabado, 30 Abril 2011, 05:35 Ver último mensaje
soplo
No hay nuevos mensajes Como Crear Un Evento DobleClic En Una Clase? v3ctor Controles/Librerías/Componentes 3 Miercoles, 28 Junio 2017, 16:12 Ver último mensaje
vuott
No hay nuevos mensajes Mover Una Ventana Desde Un Evento De Un Panel gambafeliz General 4 Miercoles, 25 Septiembre 2019, 06:56 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron