Fechar form sem testar campos
Oi,
Eu pesquisei aqui no fórum sobre esse problema e como não achei algo que solucionasse minha dúvida, resolvi postar esse tópico.
Tenho um form de cadastro c/ 3 campos edit obrigatórios (são testados no on exit se não estão vazios), o meu problema é que o botão fechar não fecha o form sem testar esses campos, já pensei em pôr o set focus no botão fechar sempre que abro o form, p/ o caso da pessoa desistir de cadastrar e querer sair assim que abre o form mas, se ela quiser começar a cadastrar e depois quiser fechar o form sem preencher todos os campos obrigatórios, acontecerá o mesmo problema. Pensei que talvez tivesse um jeito de testar no evento on exit desses campos se o botão fechar foi pressionado, mas tbém não sei como...
Agradeço qq ajuda.
Eu pesquisei aqui no fórum sobre esse problema e como não achei algo que solucionasse minha dúvida, resolvi postar esse tópico.
Tenho um form de cadastro c/ 3 campos edit obrigatórios (são testados no on exit se não estão vazios), o meu problema é que o botão fechar não fecha o form sem testar esses campos, já pensei em pôr o set focus no botão fechar sempre que abro o form, p/ o caso da pessoa desistir de cadastrar e querer sair assim que abre o form mas, se ela quiser começar a cadastrar e depois quiser fechar o form sem preencher todos os campos obrigatórios, acontecerá o mesmo problema. Pensei que talvez tivesse um jeito de testar no evento on exit desses campos se o botão fechar foi pressionado, mas tbém não sei como...
Agradeço qq ajuda.
Repa
Curtidas 0
Respostas
Ariovaldo
01/04/2005
Se vc testasse no Before post não solucionaria seu Problema?
GOSTEI 0
Gandalf.nho
01/04/2005
Vc não pode testar em outro lugar se os campos estão preenchidos?
GOSTEI 0
Repa
01/04/2005
Eu poderia testar os campos somente no botão incluir, mas então a pessoa teria que digitar tudo e depois os campos seriam validados, acho que assim fica ruim p/ o usuário, não?
Pq no x do form ele fecha normalmente sem passar no onexit dos campos?
Pq no x do form ele fecha normalmente sem passar no onexit dos campos?
GOSTEI 0
Ariovaldo
01/04/2005
Renata e se vc colocasse um IF para que testasse a condição de Vazia somente quando estivesse no modo de Edição ou inserção, será que não resolveria
GOSTEI 0
Gandalf.nho
01/04/2005
Talvez pq ao clicar no botão muda o foco dos campos e no X do form não. Que tipo de controle vc usa para o botão? Experimente usar um componente como o SpeedButton que não recebe foco para ver se ajuda.
GOSTEI 0
Repa
01/04/2005
Renata e se vc colocasse um IF para que testasse a condição de Vazia somente quando estivesse no modo de Edição ou inserção, será que não resolveria
O problema seria qdo a pessoa já estivesse fazendo a inclusão e quisesse desistir, não iria fechar a menos que digitasse algo nos campos obrigatórios...
Gandalf, eu uso o bitbtn e no evento onclick fecho as tabelas...
GOSTEI 0
Vinicius2k
01/04/2005
Olá Renata !
Exatamente. Se for usado um controle sem foco, a validação pode ficar no OnExit.
Fora isso, que eu saiba, a validação deve ser somente no final... É assim que eu uso.
Sugestão :
Tire as operações adicionais do botão de fechar e coloque no evento OnClose do formulário. Desta forma vc irá garantir que de qualquer forma que form seja fechado, as operações sejam realizadas.
Vc pode usar dois artifícios se quiser manter a validação no OnExit :
1. Use um controle que não receba foco como sendo o botão de fechar... Um TSpeedButton, por exemplo.
2. Altere a propriedade [b:9532047cf2]KeyPreview[/b:9532047cf2] do Form para [b:9532047cf2]True[/b:9532047cf2] e trabalhe no OnKeyDown do Form com algo parecido com isto :
Se achar conveniente, só chame o close se o usuário confirmar que quer abandonar a edição...
São só idéias... o mais comum é que a validação de todos os campos seja feito apenas no final, realmente.
T+
Talvez pq ao clicar no botão muda o foco dos campos e no X do form não. Que tipo de controle vc usa para o botão? Experimente usar um componente como o SpeedButton que não recebe foco para ver se ajuda.
Exatamente. Se for usado um controle sem foco, a validação pode ficar no OnExit.
Fora isso, que eu saiba, a validação deve ser somente no final... É assim que eu uso.
Sugestão :
Tire as operações adicionais do botão de fechar e coloque no evento OnClose do formulário. Desta forma vc irá garantir que de qualquer forma que form seja fechado, as operações sejam realizadas.
Vc pode usar dois artifícios se quiser manter a validação no OnExit :
1. Use um controle que não receba foco como sendo o botão de fechar... Um TSpeedButton, por exemplo.
2. Altere a propriedade [b:9532047cf2]KeyPreview[/b:9532047cf2] do Form para [b:9532047cf2]True[/b:9532047cf2] e trabalhe no OnKeyDown do Form com algo parecido com isto :
if Key = VK_ESCAPE then Close;
Se achar conveniente, só chame o close se o usuário confirmar que quer abandonar a edição...
São só idéias... o mais comum é que a validação de todos os campos seja feito apenas no final, realmente.
T+
GOSTEI 0
Repa
01/04/2005
Muito obrigada, Ariovaldo, Gandalf e Vinícius.. O speedbutton deu certinho e posso continuar testando os campos normalmente... :D
GOSTEI 0