En el siguiente ejemplo:
Al pulsar intro en el get debe pasar por el valid del mismo, osea ejecutar msgInfo('1').
Sin embargo, si pulsamos en el bot贸n y luego volvemos al get ya no ejecuta el valid.
Comprobando el c贸digo he visto que el m茅todo "FWLostFocus" de la clase control llama a lValid en el caso de que ::lValidating sea nil o falso
Pero en el m茅todo "Click" de la clase button se iguala lValidating a true y no se vuelve a pasar a nil o a falso
Por lo que es normal que no se vuelva a ejecutar los valid's
#include 'Fivewin.ch'
function Main()
LOCAL oDlg
LOCAL oGet1, oGet2, oGet3, oBtn
LOCAL cVar1 := 'ABCDEF '
LOCAL cVar2 := SPACE( 8 )
LOCAL cVar3 := SPACE( 8 )
DEFINE DIALOG oDlg FROM 0, 0 TO 10, 30
@ 1, 1 GET oGet1 VAR cVar1 SIZE 30,12 PIXEL Valid ( MsgInfo('1'), .T. )
@ 40,50 BUTTON oBtn PROMPT '&Test' SIZE 30, 20 PIXEL
ACTIVATE DIALOG oDlg CENTER
return NILAl pulsar intro en el get debe pasar por el valid del mismo, osea ejecutar msgInfo('1').
Sin embargo, si pulsamos en el bot贸n y luego volvemos al get ya no ejecuta el valid.
Comprobando el c贸digo he visto que el m茅todo "FWLostFocus" de la clase control llama a lValid en el caso de que ::lValidating sea nil o falso
METHOD FWLostFocus( hCtlFocus ) CLASS TControl
local oWnd, oCtl
if ::oWnd:lValidating == nil .or. ! ::oWnd:lValidating // FW++ lValidating nil sometimes
::oWnd:lValidating = .t.
...Pero en el m茅todo "Click" de la clase button se iguala lValidating a true y no se vuelve a pasar a nil o a falso
METHOD Click() CLASS TButton
if ! ::lProcessing
::lProcessing = .t.
if ::bWhen != nil .and. ! Eval( ::bWhen )
::lProcessing = .f.
return nil
endif
::oWnd:lValidating = .T.
...Por lo que es normal que no se vuelva a ejecutar los valid's
Un saludo
Fernando Gonz谩lez Diez
ALSIS Sistemas Inform谩ticos
Fernando Gonz谩lez Diez
ALSIS Sistemas Inform谩ticos