Resulta que en ocasiones queremos que al presionar CTRL+F4 o haciendo clic en el botón Cerrar, no se active el evento Valid, imaginándonos que tal vez, dicho evento manda a llamar a algún proceso que consume tiempo, mismo que nuestros usuarios ven (y yo también) innecesario.
La forma "fácil" es forzar a que los usuarios vacíen el valor en el control y solo entonces, dejar que salga del Formulario, esto también es algo engorroso.
Veamos entonces la forma mas cómoda para evitar la validación cuando en realidad deseamos salirnos....
public oForm
oForm=CREATEOBJECT("MyForm")
oForm.Show()
DEFINE CLASS MyForm AS FORM
Caption="Ejemplo para evitar Validación"
ADD OBJECT MyTextBox AS TextBox WITH Height=25
ADD OBJECT MyText2 AS TExtBox WITH Height=25, Top=60
ADD OBJECT cmdCancelar AS CommandButton WITH Top=90, Caption="Cancelar", Height=30
PROCEDURE MyTextbox.Valid
DO CASE
CASE !Wontop(Thisform.Name)
** Activando desde otro Form, no validar
Return .T.
CASE Thisform.ReleaseType>0
** Saliendo de VFP, o haciendo clik en Cerrar. No validar
Return .T.
OTHERWISE
DO CASE
CASE Mdown()
*** Si es que esta haciendo Click en el boton Cancelar....
*** No validar, cambia el nombre de cmdCancelar si no se llamara así
loobj=Sys(1270)
IF Vartype(loObj)='O' AND lower(loObj.Name)='cmdcancelar'
loObj = NULL
Return .T.
ENDIF
CASE Lastkey()=27
*** Presionando la tecla Escape, no validar
Return .T.
ENDCASE
ENDCASE
****** Aqui se pondria el proceso normal de Validacion *******
Messagebox("Validando")
ENDPROC
PROCEDURE cmdCancelar.Click
Thisform.Release()
ENDPROC
ENDDEFINE
Copie y pegue el código arriba descrito en su ventana de comandos, seleccione el código en la ventana de comandos y presione ENTER.Podrá ver un formulario con tres controles, dos TextBox, y un Command Button. Si se pasa de un TextBox a otro se ejecuta el supuesto código de validación, pero si presiona el botón Cancelar o cierra el formulario, el código de validación no se ejecuta, sin importar si existen datos en el TextBox que tiene la validación.
Espero les sea de utilidad.
Espartaco Palma Martínez
Magnífico aporte.
ResponderBorrarEs raro que no tenga ningún comentario.
Tengo como "hobby" la programación en VFP y este artículo ha resuelto una duda que he tenido desde hace meses, jaja.
Muchas gracias.
Atte. Héctor Guzmán