Página 1 de 1

Problema com Lostfocus no Textbox

Enviado: 01 Jul 2025 14:07
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

Problema com Lostfocus no Textbox

Enviado: 03 Jul 2025 09:39
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

Problema com Lostfocus no Textbox

Enviado: 03 Jul 2025 16:04
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.

Problema com Lostfocus no Textbox

Enviado: 08 Jul 2025 10:08
por mmarcondes
Pessoal, obrigado pelas ajudas, mudei de textbox para getbox, e mais parecido com o Clipper.