Te comento que hay todo un debate sobre que fue primero el huevo o la gallina, no no no ese es otro jejejeje
Hay un debate sobre cual es mejor usar el Valid() o el LostFocus() te pueden contar historia de terror y cuentos chinos, pero los que desarrollaron VFP claramente definieron el Valid() para validar datos de ahí su nombre y el LostFocus() cuando el objeto pierde el foco, aclarado ese punto lo que necesitas es realizar esa validación dentro del valid(), PERO siempre hay un pero!!!
Si trasladas tu instrucción al valid() tendrá el mismo efecto, y tiene lógica, porque lo que haya en el valid se va a ejecutar hagas lo que hagas, pero hay un truco para evitarlo que es el que uso siempre!!
Hay dos formas, la primera la mas rápida es que creas una propiedad en tu formulario llamada por ejemplo: thisform.validar_datos = .F. recuerda que le puedes poner el nombre que quieras y luego en el InteractiveChange() de tu textbox u objeto que quieres que no se valide nada le pones lo siguiente
Dentro del InteractiveChange()
thisform.validar_datos = .T.
Y luego en el valid() queda así:
IF thisform.validar_datos = .T.
thisform.validar_datos = .F.
if empty( this.value )
messagebox( "ingrese un valor " )
ENDIF
Y la segunda forma que es la correcta es crear una clase para evitar eso pero si no manejas clases pues es mas cuento jejeje
saludos
Antonio Meza