Salir con ESC de un formulario

472 views
Skip to first unread message

PETACA

unread,
Oct 16, 2014, 8:15:59 AM10/16/14
to publice...@googlegroups.com
Hola a todos. Tengo un formulario con un text box donde el usuario ingresa el código de cliente. Si quiero salir con el botón salir del form no puedo
hasta que no cargue un código de cliente válido. Hay alguna manera de forzar a cerrar el formulario aunque el código de cliente sea 0 (cero) por ejemplo.
Saludos y gracias

Arnaldo Toledano

unread,
Oct 16, 2014, 9:01:32 AM10/16/14
to publice...@googlegroups.com, arnaldo....@gmail.com
Yo utilizo lo siguiente.
En tu caso.
En el valid de código de cliente

IF CursorSobre("NOMBRE_BOTON_TEXBOX_LOQUESEA")
   RETURN .T.
ENDIF   
..... EL valid que vos quieras.

la función CursorSobre me devuelve .T. si en nombre coincide con "NOMBRE_BOTON_TEXBOX_LOQUESEA"


*------------------------------------------------------------------      
                     Function CURSORSOBRE
                    
*Saber donde esta el cursor, en que boton.
* Devuelve .T. si es la "presumida"
*------------------------------------------------------------------                    
LParameters Controles
Local Num, Objeto, Resultado
Resultado = .F.
 
Num = AMouseObj(Vec, 1)

If Num > 0
   Objeto = Vec[1]
   Objeto = Objeto.Name
   if UPPER(Objeto) $ UPPER(Controles)
     Resultado = .T.
   endif
endif
 
Return(Resultado)


Una segunda ALTERNATIVA es que le permitas salir con '0'  (Cero),en este caso es alfabético.
en el valid.
If This.Value="0"
   Return .T.
endif

Arnaldo Toledano
--
Arnaldo Toledano Tesys Informática Córdoba Argentina

Fidel Charny

unread,
Oct 16, 2014, 9:03:20 AM10/16/14
to publice...@googlegroups.com
Supongo que utilizas el evento Valid del textbox. Lo que puedes hacer es condicionarlo a que no sea un valor cero.
<valid Event>
if !empty(this.value)
        * Código de validación

endif

Si tienes algún código de ejecución en el LostFocus del textbox, también tienes que condicionarlo a que no sea un valor cero.

Luis Maria Guayan

unread,
Oct 16, 2014, 9:14:47 AM10/16/14
to publice...@googlegroups.com
Mira si este código de Esparta Palma te ayuda

-- Evitar el evento Valid al salir del formulario --
http://comunidadvfp.blogspot.com/2003/11/evitar-el-evento-valid-al-salir-del.html


Luis María Guayán
Tucumán, Argentina
_____________________________
http://comunidadvfp.blogspot.com

Antonio Meza

unread,
Oct 16, 2014, 10:57:39 AM10/16/14
to publice...@googlegroups.com
Hay muchas formas de evitarlo, pero lo que uso es mas simple y mucho menos código, a demás sirve para cualquier control que uses el Valid

El truco esta en crear un propiedad en el formulario cualquier nombre, aunque lo mejor es tener un clase de cada control y dentro de este crear la propiedad, ejemplo usando la propiedad del formulario.

thisform.lcambios = .f.

Luego en el evento InterativeChange del control pones la propiedad así:
thisform.lcambios = .t.

Y ya en el evento valid de tu control haces lo siguiente
If thisform.lcambios
     thisform.lcambios = .f.
     * Aquí todo tu código de validación
ENDIF

Lo que hace es que si el control recibe el focus, y presiona enter, tab, esc, usas las flechas, etc no ejecuta tu código, solo lo hará si el usuario cambia el valor, si quieres mas validaciones las puedes hacer, por ejemplo supongamos que el usuario escribió el cliente 10 pero se arrepiente y presiona ESC para salir, entonces seria algo así
If thisform.lcambios
     thisform.lcambios = .f.
     IF LASTKEY() = 27
          return 
     ENDIF
     * Aquí todo tu código de validación
ENDIF

Igual si quieres a demás que cuando escriban 0 (cero) avise o no avise que el código no es valido, y regrese al control es decir que no pierda el focus seria algo así
If thisform.lcambios
     thisform.lcambios = .f.
     IF LASTKEY() = 27
          return 
     ENDIF
     IF this.value = 0
          messagebox("Codigo no valido")
          return 0
     ENDIF
     * Aquí todo tu código de validación
ENDIF

saludos
Antonio Meza

Carton Jeston

unread,
Oct 18, 2014, 4:04:07 PM10/18/14
to publice...@googlegroups.com
No se el caso, pero segun el titulo necesitas salir de un formulario con esc.... mira el metodo del Form.Keypress

LPARAMETERS nKeyCode, nShiftAltCtrl


IF nkeycode
=27 && ESC
thisform
.release
ENDIF


Tambien se puede poner en el campo en cuestion.

un saludo

Victor Espina

unread,
Oct 20, 2014, 6:31:17 PM10/20/14
to publice...@googlegroups.com
Sin olvidar poner en .T. la propiedad KeyPreview, de modo que el form tenga precedencia sobre el control activo al momento de procesar los eventos de teclado.

Victor Espina

Arturo Zamudio

unread,
Oct 20, 2014, 8:19:21 PM10/20/14
to publice...@googlegroups.com
si lo que deseas es solo salir del formulario, pon en true la propiedad del boton cancelar, el codigo se ejecuta cuando le das esc

Raúl Andrés Maraví Gamarra

unread,
May 2, 2020, 12:34:22 AM5/2/20
to Comunidad de Visual Foxpro en Español
Excelente respuesta Arturo, que practico eres, mis respetos
Reply all
Reply to author
Forward
0 new messages