Página 1 de 1
Como validar uma entrada no componente TEXTBOX
Enviado: 27 Nov 2014 11:51
por billy1943
Peço aos colegas, que dentro do exemplo simples abaixo, usando o componente TEXTBOX, e a IDE do HMG (Roberto Lopez), suponham a seguinte situação:
- eu quero limitar o Estado digitado somente aos seguintes: "SP", "MG", "MT" e "MS"
- como eu incluiria tal condição no momento de digitação, semelhante à cláusula
VALID do Clipper (get/read) ?
- pode ser na forma de uma função externa, que quando acionada ela retorne um valor
Verdadeiro ou
Falso e enquanto não der
Verdadeiro não passa de jeito nenhum ao campo seguinte.
O próximo campo a ser editado é o Fone1 que passa o foco quando teclo <ENTER>.
Pergunto também: e se eu terminar a entrada do campo com <TAB> ?
Código: Selecionar todos
@130,370 TEXTBOX Agenda_Estado ;
WIDTH 40 ;
FONT "Arial" Size 9 ;
TOOLTIP "Digite o Estado do Contato";
MAXLENGTH 02 UPPERCASE;
ON ENTER Novo_Agenda.Agenda_Fone1.SetFocus
Como validar uma entrada no componente TEXTBOX
Enviado: 28 Nov 2014 19:18
por Toledo
Amigo, coloque uma validação no ON ENTER:
Código: Selecionar todos
Function ValidaUF()
Local vUF := Novo_Agenda.Agenda_Estado.Value
IF !(vUF $ [SP-MG-MT-MS])
MsgInfo("Sigla do Estado Inválida")
Novo_Agenda.Agenda_Estado.SetFocus
ELSE
Novo_Agenda.Agenda_Fone1.SetFocus
ENDIF
Return Nil
billy1943 escreveu:Pergunto também: e se eu terminar a entrada do campo com <TAB> ?
Neste caso a validação no ON ENTER não vai funcionar.
O que você pode fazer é tentar anular a função TAB, por exemplo:
Este comando coloque antes de ativar a janela (Novo_Agenda.Activate ou ACTIVATE WINDOW Novo_Agenda)
Abraços,
Como validar uma entrada no componente TEXTBOX
Enviado: 01 Dez 2014 11:48
por billy1943
Olá Toledo
Seguindo suas orientações inclui as funções VALIDAUF() e NADAFAZ() para o teste abaixo:
Código: Selecionar todos
@130,370 TEXTBOX Agenda_Estado ;
WIDTH 40 ;
FONT "Arial" Size 9 ;
TOOLTIP "Digite o Estado do Contato";
MAXLENGTH 02 UPPERCASE;
ON ENTER ValidaUF() ;
On Key TAB Of Novo_Agenda_Estado Action NadaFaz()
A primeira funcionou perfeitamente dando mensagem de alerta e passando o foco para o próximo campo.
Já a linha onde testa o acionamento da tecla TAB está dando erro de compilação abaixo, conforme conteúdo do Error.Log:
Código: Selecionar todos
Harbour 3.2.0dev (r1407111333)
Copyright (c) 1999-2014, http://harbour-project.org/
C:\hmg.3.3.1\SAMPLES\Applications\AgendaNova\Agenda2.PRG(246) Error E0030 Syntax error "syntax error at '@'"
1 error
No code generated.
hbmk2[agenda]: Erro: Executando o compilador Harbour (interno): 1
(C:\hmg.3.3.1\harbour\bin\harbour.exe) -n2 C:\hmg.3.3.1\SAMPLES\Applications\AgendaNova\agenda.prg -DHBMK_HAS_HMG=1 -q -DHBMK_HAS_AGENDA=1 -oC:\Users\Willian\AppData\Local\Temp\hbmk_7g2gvb.dir\ -iC:\hmg.3.3.1\harbour\include -i. -iC:\hmg.3.3.1\include
Como validar uma entrada no componente TEXTBOX
Enviado: 01 Dez 2014 13:18
por Toledo
billy1943 escreveu:Já a linha onde testa o acionamento da tecla TAB está dando erro de compilação
Amigo, como observei na minha mensagem anterior, o comando
On Key TAB Of Novo_Agenda Action NadaFaz() tem que ser colocado antes de ativar a janela (Novo_Agenda.Activate ou ACTIVATE WINDOW Novo_Agenda). Então no seu código onde está o TEXTBOX procure por
Novo_Agenda.Activate ou
ACTIVATE WINDOW Novo_Agenda e incluir na linha anterior o comando:
On Key TAB Of Novo_Agenda Action NadaFaz()
Atenção: o comando
On Key TAB Of Novo_Agenda Action NadaFaz() não faz parte do TEXTBOX, é um comando a parte.
Abraços,
Como validar uma entrada no componente TEXTBOX
Enviado: 01 Dez 2014 18:39
por billy1943
Nosso amigo Toledo novamente esclareceu a minha dúvida, o que facilitou tudo.
Entendi agora que o TAB fica totalmente desativado em todos os TEXTBOX daquela janela (Window), e que aceitará apenas a tecla <ENTER> para terminar cada edição.
Obrigado.
RESOLVIDO.