Como vocês resolveriam esse problema ? (OnLostFocus)
Enviado: 15 Mai 2020 03:40
Pessoal, estou estudando HMG (Hmg3.4.4) na quarentena. Sou iniciante, apesar de já ter usado Minigui há muitos anos.
Vou apresentar um probleminha (mas que pode ser um problemão quando tenho forms com muitos controles)
( 1 ) O objetivo : Quando uso o evento OnLostFocus para tratar dados em um Text, as vezes existe um erro no valor (CPF incorreto, por exemplo) e o controle não deve perder o foco. Devo, então, evitar que o controle Text perca o foco para que o usuário faça as devidas correções.
Até aí tudo blz. No exemplo abaixo o campo Text_1 tem a Procedure Text01 associada ao seu evento OnLostFocus.
(2) Agora, o problema. Vamos supor que, após o próximo campo (vou chamar Text_2) TAMBÉM tenha um evento OnLostFocus associado a uma procedure
que chamei de Text02
Aqui ocorre um fato desagradável, porque, supondo que o valor de Text_1 tenha um erro (CPF incorreto), o próximo controle (Text_2) irá receber o foco, independente do valor de Text_1 estar incorreto ou não. Ou seja, Text_2 vai ganhar o foco, e quando eu for sair devolver o Foco para Text_1 (SetFocus) a procedure Text02() será executada.
(3) Agora a solução que eu encontrei : Coloco TABSTOP de Text_2 como .F. para evitar que Text_2 receba o foco. Mas isso, a meu ver, não resolverá o problema satisfatoriamente (pelo menos para mim).
(4) Pergunto aos senhores: como vocês resolvem esse problema ? Teria como eu evitar sair de Text_1 quando existir um erro dentro da procedure Text01 chamada por OnLostFocus ?
Obs.: eu anexei o fonte para quem quiser testar.
Valeu pessoal
Vou apresentar um probleminha (mas que pode ser um problemão quando tenho forms com muitos controles)
( 1 ) O objetivo : Quando uso o evento OnLostFocus para tratar dados em um Text, as vezes existe um erro no valor (CPF incorreto, por exemplo) e o controle não deve perder o foco. Devo, então, evitar que o controle Text perca o foco para que o usuário faça as devidas correções.
Até aí tudo blz. No exemplo abaixo o campo Text_1 tem a Procedure Text01 associada ao seu evento OnLostFocus.
PROCEDURE Text01
MsgInfo("Faz de conta que aqui tem um erro")
doMethod( "Main" , "Text_1" , "SetFocus" ) // Foco no campo
RETURN
(2) Agora, o problema. Vamos supor que, após o próximo campo (vou chamar Text_2) TAMBÉM tenha um evento OnLostFocus associado a uma procedure
que chamei de Text02
Aqui ocorre um fato desagradável, porque, supondo que o valor de Text_1 tenha um erro (CPF incorreto), o próximo controle (Text_2) irá receber o foco, independente do valor de Text_1 estar incorreto ou não. Ou seja, Text_2 vai ganhar o foco, e quando eu for sair devolver o Foco para Text_1 (SetFocus) a procedure Text02() será executada.
PROCEDURE Text01 // Chamada por OnLostFocus de Text_1
MsgInfo("Faz de conta que aqui tem um erro")
doMethod( "Main" , "Text_1" , "SetFocus" ) // Foco no campo
RETURN
PROCEDURE Text02 // Chamada por OnLostFocus de Text_2
MsgInfo("Eu não deveria ser executado")
RETURN
(3) Agora a solução que eu encontrei : Coloco TABSTOP de Text_2 como .F. para evitar que Text_2 receba o foco. Mas isso, a meu ver, não resolverá o problema satisfatoriamente (pelo menos para mim).
(4) Pergunto aos senhores: como vocês resolvem esse problema ? Teria como eu evitar sair de Text_1 quando existir um erro dentro da procedure Text01 chamada por OnLostFocus ?
Obs.: eu anexei o fonte para quem quiser testar.
Valeu pessoal