Problema en la clase button
Posted: Fri Aug 29, 2008 11:04 am
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 ::oWnd: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
Code: Select all
#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 NIL
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 ::oWnd:lValidating sea nil o falso
Code: Select all
METHOD FWLostFocus( hCtlFocus ) CLASS TControl
local oWnd, oCtl
if ::oWnd:lValidating == nil .or. ! ::oWnd:lValidating // FW++ lValidating nil sometimes
::oWnd:lValidating = .t.
...
Code: Select all
METHOD Click() CLASS TButton
if ! ::lProcessing
::lProcessing = .t.
if ::bWhen != nil .and. ! Eval( ::bWhen )
::lProcessing = .f.
return nil
endif
::oWnd:lValidating = .T.
...