In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

evento onexit

Foro de Xailer profesional en español
Responder
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

evento onexit

Mensaje por Francisco Sanchez »

Tengo un evento onexit en el cual hago una comprobacion del tipo :
local achou := .T.
If nValor > x
MsgStop(....
If MsgYesno(....
--x
else
achou := .F.
Endif
Return ( achou )
me lo ejecuta 2 veces. Me parece que es por el msgstop y el msgyesno, pero
no habria forma de evitar que se ejecute 2 veces?
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

evento onexit

Mensaje por Francisco Sanchez »

Se me ha ocurrido lo siguiente y explico la problematica pues quizas por ahi
lo solucione.
Tengo un formulario con una serie de datos. Datos que despues del showmodal
correspondiente tengo que consultar para actualizar una dbf. Por lo tanto o
bien cierro despues de actualizar la dbf o bien la pongo lHideOnclose. La
cuestion es la siguiente. Como ya plantee aqui en este mismo foro en un
pasado. El formulario lo cierro desde una toolbar. Algunos de los controles
llevan un metodo asignado a modo de VALID en el evento onexit
correspondiente. Para conseguir que se ejecuten todos si pulso en la toolbar
tengo que poner la llamada a todos estos eventos onexit, el el evento
onclose del formulario y cerrar con Close(). Hasta ahi correcto. Pero... si
el formulario no es lhideonclose := .T. Que pasa ? pues que tengo que
ejecutar yo a mano el onexit como por ejemplo seria :
oForm:oCombobox_estado:Onexit() para forzarlo a que lo ejecute, antes de
hacer el Close() pues tengo que forzar el onexit y una vez superado en caso
de que devolviese .T., que actualice la dbf y entonces si, cerrar el
formulario con close(). Pero que pasa que haciendolo asi te ejecuta el
evento onexit correspondiente 2 veces cada vez. Puesto que son del tipo If
nValor > x ..... MsgStop.... y MsgYesno...... Por otros apartados y
formularios comprobe que desde el evento onclose del formulario pues parece
que no lo ejecuta 2 veces o al menos no me la ha parecido, la verdad tampoco
en estos doy a escoger al usuario con un msgyesno, simplemente devuelvo .t.
o .f. segun una comprobacion con if .... lo que sea.
Entonces creo que si hiciese lHideonclose := .T. podria poner tranquilamente
la llamada a los eventos onexit en el onclose del formulario para asi hacer
:Close(). Pero tendria que saber que pasa con el formulario? se queda
residente en memoria? entonces que tendria que matarlo con :End() ?. Tampoco
veo si esto seria la solucion pues me parece que el problema va a ser que
pongo un msgyesno en el onexit de algun control. no se. Alguna pista para
poder solucionarlo?
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

evento onexit

Mensaje por jfgimenez »

Paco,
> Tengo un formulario con una serie de datos. Datos que despues del
> showmodal correspondiente tengo que consultar para actualizar una dbf. Por
> lo tanto o bien cierro despues de actualizar la dbf o bien la pongo
> lHideOnclose. La cuestion es la siguiente. Como ya plantee aqui en este
> mismo foro en un pasado. El formulario lo cierro desde una toolbar.
> Algunos de los controles llevan un metodo asignado a modo de VALID en el
> evento onexit correspondiente. Para conseguir que se ejecuten todos si
> pulso en la toolbar tengo que poner la llamada a todos estos eventos
> onexit, el el evento
Según parece, el problema es que al pulsar un botón de la toolbar no se
dispara el OnExit del control que tiene el foco, ¿no?
Si es esto, en vez de ejecutar tú el OnExit de todos los controles, ejecuta
esto:
::oActiveControl:Valid( ::oToolbar1 )
> onclose del formulario y cerrar con Close(). Hasta ahi correcto. Pero...
> si el formulario no es lhideonclose := .T. Que pasa ? pues que tengo que
> ejecutar yo a mano el onexit como por ejemplo seria :
> oForm:oCombobox_estado:Onexit() para forzarlo a que lo ejecute, antes de
> hacer el Close() pues tengo que forzar el onexit y una vez superado en
> caso de que devolviese .T., que actualice la dbf y entonces si, cerrar el
> formulario con close(). Pero que pasa que haciendolo asi te ejecuta el
> evento onexit correspondiente 2 veces cada vez. Puesto que son del tipo If
> nValor > x ..... MsgStop.... y MsgYesno...... Por otros apartados y
> formularios comprobe que desde el evento onclose del formulario pues
> parece que no lo ejecuta 2 veces o al menos no me la ha parecido, la
> verdad tampoco en estos doy a escoger al usuario con un msgyesno,
> simplemente devuelvo .t. o .f. segun una comprobacion con if .... lo que
> sea.
> Entonces creo que si hiciese lHideonclose := .T. podria poner
> tranquilamente la llamada a los eventos onexit en el onclose del
> formulario para asi hacer :Close(). Pero tendria que saber que pasa con el
> formulario? se queda residente en memoria? entonces que tendria que
> matarlo con :End() ?. Tampoco
Siempre que un formulario tenga lHideOnClose = .T., no se destruye al
cerrarlo, por lo que hay que destruirlo llamando a :End() cuando ya no nos
haga falta.
> veo si esto seria la solucion pues me parece que el problema va a ser que
> pongo un msgyesno en el onexit de algun control. no se. Alguna pista para
> poder solucionarlo?
Prueba como te he comentado, y si no se soluciona, por favor, prepáranos un
pequeño ejemplo que podamos revisar.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

evento onexit

Mensaje por ignacio »

Francisco,
> Para conseguir que se ejecuten todos si pulso en la toolbar tengo que
> poner la llamada a todos estos eventos onexit, el el evento onclose del
> formulario y cerrar con Close(). Hasta ahi correcto.
No es necesario, simplemente llama a Close() en el botón de la Toolbar, y en
el evento OnClose haces las validaciones que quieras. No hace falta que
simules ningún evento OnExit en los controles, de hecho no me parece la
forma más elegante de hacerlo.
Un saludo,
"Francisco Sanchez" <francisco@softwaretotal.biz> escribió en el mensaje
news:[email=426914b9@ozsrvnegro.ozlan.local...]426914b9@ozsrvnegro.ozlan.local...[/email]
> Se me ha ocurrido lo siguiente y explico la problematica pues quizas por
> ahi lo solucione.
>
> Tengo un formulario con una serie de datos. Datos que despues del
> showmodal correspondiente tengo que consultar para actualizar una dbf. Por
> lo tanto o bien cierro despues de actualizar la dbf o bien la pongo
> lHideOnclose. La cuestion es la siguiente. Como ya plantee aqui en este
> mismo foro en un pasado. El formulario lo cierro desde una toolbar.
> Algunos de los controles llevan un metodo asignado a modo de VALID en el
> evento onexit correspondiente. Para conseguir que se ejecuten todos si
> pulso en la toolbar tengo que poner la llamada a todos estos eventos
> onexit, el el evento onclose del formulario y cerrar con Close(). Hasta
> ahi correcto. Pero... si el formulario no es lhideonclose := .T. Que pasa
> ? pues que tengo que ejecutar yo a mano el onexit como por ejemplo seria :
> oForm:oCombobox_estado:Onexit() para forzarlo a que lo ejecute, antes de
> hacer el Close() pues tengo que forzar el onexit y una vez superado en
> caso de que devolviese .T., que actualice la dbf y entonces si, cerrar el
> formulario con close(). Pero que pasa que haciendolo asi te ejecuta el
> evento onexit correspondiente 2 veces cada vez. Puesto que son del tipo If
> nValor > x ..... MsgStop.... y MsgYesno...... Por otros apartados y
> formularios comprobe que desde el evento onclose del formulario pues
> parece que no lo ejecuta 2 veces o al menos no me la ha parecido, la
> verdad tampoco en estos doy a escoger al usuario con un msgyesno,
> simplemente devuelvo .t. o .f. segun una comprobacion con if .... lo que
> sea.
> Entonces creo que si hiciese lHideonclose := .T. podria poner
> tranquilamente la llamada a los eventos onexit en el onclose del
> formulario para asi hacer :Close(). Pero tendria que saber que pasa con el
> formulario? se queda residente en memoria? entonces que tendria que
> matarlo con :End() ?. Tampoco veo si esto seria la solucion pues me parece
> que el problema va a ser que pongo un msgyesno en el onexit de algun
> control. no se. Alguna pista para poder solucionarlo?
>
> Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Francisco Sanchez
Mensajes: 532
Registrado: Mié Feb 09, 2005 6:20 pm

evento onexit

Mensaje por Francisco Sanchez »

no me he explicado correctamente. No estoy simulando nada. Simplemente es
cuestion de que tengo que leer el contenido de los controles del formulario,
es decir las variables para actualizar un registro de una dbf pero resulta
que si no cierro el formulario no ejecuta los eventos onexit que puse en el
evento onclose del formulario. Y si cierro el formulario para ejecutar los
eventos, no tengo las variables, asi de simple. Por eso preguntaba lo del
lHideonclose, puesto que puede ser una solucion ejecutar :Close() para que
ejecute los onexit, y a continuacion leer las variables es decir, los :value
de los maskedit y demas del formulario, actualizar la dbf y despues hacer
:End() con esto creo que estaria solucionado. Ojo no es que no funcione eh!
es simplemente en este caso en concreto que existe esta problematica.
Atentamente : Francisco Sanchez GERENTE GRUPO ST - Software TOTAL
Responder