PDA

Ver la Versión Completa : Capturar o no el evento on Exit


apicito
13-02-2004, 10:46:34
En el evento onExit de un DBEdit (introducción de Dni) hago una validación del mismo, pero necesitaría que si el exit se produce como consecuencia de la pulsación del boton de cerrar formulario omita esa comprobación, ya que si tengo introducido un dni incorrecto en vez de cerrar salta el evento de dni incorrecto. Como podría obviar el onxit en estos casos?

Nuria
13-02-2004, 11:42:15
Hola Apicito!

Yo en tú lugar las comprobaciones de los campos las haría antes de validar el registro, no en el onExit del DBEdit. Así, sólo hago las comprobaciones oportunas cuando realmente quiera grabar el registro.

Espero que te sirva.

Saludos!

__cadetill
13-02-2004, 11:47:04
Si cierras el formulario con un botón, no podrás controlarlo. Me explico. El orden en que saltan los eventos es el siguiente:

OnExit del DbEdit
OnClick del Button

Por lo que al salir, "no sabes" a donde vas.

Si te gusta la idea, en lugar de un TButton pon un TSpeedButton, el cual hace que el componente origen no pierda el foco (pos lo que no salta el OnExit del componente) y podrás, en el SpeedButton, hacer un Cancel del registro

No obstante, validaciones de este tipo, personalmente prefiero hacerlas en el OnValidate del TField (para desligarme del control visual)

apicito
13-02-2004, 12:28:13
Gracias por las respuestas. Lo del speedbutton lo había pensado, pero el problema persiste si se cierra con el boton de cerrar de la barra del formulario.
Tendré que validar al final...

eduarcol
13-02-2004, 16:56:15
lo que dicen mis compañeros es cierto, pero en algunos casos la validacion se debe hacer en el onexit del edit, para eso te recomiendo que en el comienzo del onexit coloques este codigo


if (ActiveControl is BotonSalir) then
Exit;


donde boton salir es el nombre del boton que utilizas para cerrar el formulario,si necesitas validar para otros controles entonces utiliza el condicional "or" y solo tienes que repetir la condicion para cada control que necesites que tome el foco sin validar

roman
13-02-2004, 17:12:08
if (ActiveControl is BotonSalir) then
Exit;



Quizá me equivoque pero me parece que esto no funciona. El edit no pierde el foco sino hasta que termina el evento OnExit de manera que ActiveControl será él mismo.

// Saludos

eduarcol
13-02-2004, 17:17:56
si funciona, pruebalo y veras tengo mucho tiempo utilizando este truco enmis proyectos y va de maravilla :D

roman
13-02-2004, 17:26:04
si funciona, pruebalo y veras

Tienes toda la razón, ya lo probé.

// Saludos

jachguate
22-02-2004, 18:07:47
pero en algunos casos la validacion se debe hacer en el onexit del edit

Tu truco está muy bien, y no dudo que sea util... pero no estoy de acuerdo en que se "debe"... :rolleyes:

quizas sea mas conveniente... pero yo creo que una sana practica de programación es no mezclar los elementos de interacción del usuario con el control de los datos.

Yo mismo me he saltado esta regla algunas veces... mas por conveniencia que por deber...

apicito
23-02-2004, 09:10:28
if (ActiveControl is BotonSalir) then
Exit;

Y si el botón pulsado es el de cerrar ventana, osea el de la barra azul de la ventana, como lo identifico como ActiveControl?

eduarcol
23-02-2004, 17:20:43
Jachguate: Precisamente a eso me referia a casos de conveniencia, creo qe lo exprese mal pero si es cierto lo que tu dices, pero en algunos casos ahi que romper reglas.

Apicito: Por esa pulsacion no te preocupes, que alli el control no pierde el foco, solo lo pierde en caso de que el control presionado tenga foco, por ejemplo por un TSpeddButton tampoco te preocupes que alli el foco no se pierde