Si quieres que al presionar la tecla escape cierre el formulario o
abandone la edición, entonces puedes hacer lo siguiente.
En tu formulario crea un propiedad, puede ser CancelPressed, le
asignas .F.
En tu método KeyPress, si e presionó Escape le asignas .T. a
CancelPressend
Tu botón Cerrar o Salir debe tener verdadera la propiedad Cancel
Ahora en el valid del control pones:
If !ThisForm.CancelPressed
If Empty(thisform.xx.campo1.Value)
mensagebox("El dato no puede ser vacio",0)
Return .F.
Endif
EndIf
De manera que si se presiona Escape no se ejecuta el valid.
El formulario por sí solo le envía el Focus al botón que tiene
asignado Cancel=.T.
En el Click de tu botón debes poner
If ThisForm.CancelPressed
Que harás si presionó Escape
Puedes iniciarlizar todos los controles para permitir una nueva
captura
le asignas .F. a CancelPressed y le haces SetFocus al primer
Control
Else
Lo que debe hacer de forma normal cuando se presiona escape, o sea
cerrar el form.
EndIf
Espero te sirva, así lo hago yo y me funciona bien.
Saludos
Fabricio
On 14 ene, 11:56, "Arnaldo Toledano \(GMail\)"