Fechar form sem testar campos

Delphi

01/04/2005

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.


Repa

Repa

Curtidas 0

Respostas

Ariovaldo

Ariovaldo

01/04/2005

Se vc testasse no Before post não solucionaria seu Problema?


GOSTEI 0
Gandalf.nho

Gandalf.nho

01/04/2005

Vc não pode testar em outro lugar se os campos estão preenchidos?


GOSTEI 0
Repa

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?


GOSTEI 0
Ariovaldo

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

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

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

Vinicius2k

01/04/2005

Olá Renata !
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

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
POSTAR