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 ENDDEFINECopie 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