25 de noviembre de 2003

Evitar el evento Valid al salir del formulario

Hay veces que deseamos que al salir del formulario no se active el evento Valid de cierto control...

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

1 comentario :

  1. Magnífico aporte.
    Es 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

    ResponderEliminar