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
>