Problema com Lostfocus no Textbox

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

mmarcondes
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 02 Jul 2021 15:06
Localização: witmarsum

Problema com Lostfocus no Textbox

Mensagem por mmarcondes »

Pessoal, estou tentando validar um campo que tem digitação obrigatória, mas dá bug quando tento sair da janela, ele fica chamando function que uso no on lostfocus umas 6 vezes até sair, isso quando não trava, como resolver
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 180
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Problema com Lostfocus no Textbox

Mensagem por ivanil »

Bom dia,

Acredito que só será possível te ajudar com mais precisão se você puder compartilhar o código. A forma como o evento está sendo tratado influencia diretamente no comportamento que você está descrevendo.

Lembrando que o evento onLostFocus é disparado toda vez que o campo perde o foco. Se dentro dessa função você está forçando o foco de volta, isso pode entrar em loop — especialmente se a janela ou outro componente tenta ganhar o foco nesse momento.

Em aplicações gráficas, é comum evitar validação no lostFocus, justamente porque algumas ações podem gerar esse tipo de comportamento inesperado, além de que o usuário pode facilmente saltar o campo com o mouse;

At;

Ivanil
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Problema com Lostfocus no Textbox

Mensagem por JoséQuintas »

Lembro que esse ponto foi problema no DLAUTO, aquele automático.
Se não me engano, dá pra fazer testes no VALID.
Precisa testar

parte do fonte genérico de validação:

Código: Selecionar todos

   nPos := hb_AScan( ::aControlList, { | e | e[ CFG_CTLTYPE ] == TYPE_BUTTON .AND. ;
      e[ CFG_CAPTION ] == "Cancel" } )
   IF nPos != 0
      IF GUI():IsCurrentFocus( ::xDlg, ::aControlList[ nPos, CFG_FCONTROL ] )
         RETURN .T.
      ENDIF
   ENDIF
fonte de testar aonde está o foco

Código: Selecionar todos

STATIC FUNCTION gui_IsCurrentFocus( xDlg, xControl )

   LOCAL lOk

   IF PCount() == 1
      lOk := ( GetActiveWindow() == GetProperty( XDlg, "HANDLE" ) )
   ELSE
      lOk := ( GetProperty( xDlg, "FOCUSEDCONTROL" )  == xControl )
   ENDIF

   RETURN lOk
Simplificando:
Se o foco está no button CANCEL, significa que foi solicitado cancelamento.
Nesse caso o VALID é anulado, retorna verdadeiro sem fazer qualquer teste adicional.

Como eu já disse: faça o teste.
E confirme se já não existe algo relacionado a isso.

Na OOHG existe a cláusula CANCEL ou algo assim, que indica controles que podem anular as validações, como CANCEL e outros.
OOHG é uma das variações de HMG/minigui.
Talvez pedir um recurso igual na HMG Extended, afinal, é só olhar o fonte pra saber como foi feito.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
mmarcondes
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 02 Jul 2021 15:06
Localização: witmarsum

Problema com Lostfocus no Textbox

Mensagem por mmarcondes »

Pessoal, obrigado pelas ajudas, mudei de textbox para getbox, e mais parecido com o Clipper.
Responder