Fórum Evento onExit dos DBEdits no speedbutton #362911
24/08/2008
0
tenho em meu projeto varias verificações no evento onExit dos DBEdits, mas como estou usando speedbutton ao pedir pra gravar por exemplo o evento onExit do DBEdit não é disparado.
Isso ocorre devido ao fato dos speedtutton não receber o focu.
alguem poderia me dizer como faço pra usao os eventos onExit no onClick do speedbutton, sem ter que digitar tudo novamente?
lembrando que nos speedbutton tenho outros códigos não posso simplesmente no evento onclick escolher o evento onexit do dbedit.
Obrigado.
Welder.
Curtir tópico
+ 0Posts
24/08/2008
Marco Salles
Que no caso é o Dbedit
Assim no codigo do Onclick do SpeedButton coloque no inicio a Instrução
SelectNext(ActiveControl,false,false);
existem outras soluçoes e tb outras formas de usar o SelectNext < método da classe TWincontrol>
Gostei + 0
24/08/2008
Welder.
Existe outros métodos mesmo. eu estava usando activecontrol := nil
tanto esse como o que vc me passou funciona.
Mas tem como funcionar se o foco não estiver no controle onde está a validação, tipo em um dbedit antes?
ou seja controlar todos eventos onexit de objetos existente em um formulário no evento onclick de um speedbutton?
Gostei + 0
24/08/2008
Welder.
Olha só
Se o usuário esta digitando ai tem um campo que o foco ainda não caiu e o usuario não quer colocar aqueles dados ou simplesmente ignora. E ao clicar no botão salvar (mesmo se fosse um bitbtn ou button) a validação daquele campo não vai disparara, pois o focu ainda nem caiu nele.
então o sistema esta gravando campos que seriam obrigatorios em branco.
Gostei + 0
24/08/2008
Marco Salles
<como e o caso do TSppedButton> . Se não me engano , as Teclas de Atalho tb não perde o Foco
Por tudo isso , e mais ainda , a validação em eventos , não é recomendada .
Surgem diversos Erros e aspectos como manutenção , modificações etc.. ficam estritamente comprometidos .
Alem de criar uma Rotina de Validaçoes Gerais que voce poderia testar antes de dar um post , gerando uma exceção se alguma condição não for satisfeita Por exemplo :
procedure TForm1.SpeedButton1Click(Sender: TObject); begin if SeuDataSet.fieldByName(´NomeCampo´).asstring <> COndicao then begin raise excpetion.create(´Memsagem de Erro´); SeuDataSet.fieldByName(´NomeCampo´).focuscontrol;//manda o foco abort; end //Outras Validaçoes Similares etc... //Se tudo tiver legal SeuDataSet.post; end;
Porém existe outras formas de se fazer isto ..
´Existe a Propriedade Constraints dos controles DataSet aonde voce ter um conjunto de Regras, exite de forma parecida a Propriedade Custom Constraints dos Fields que são regras individuais para cada campo, existem tb o evento OnValidade e ainda as condiçoes dos campos que são definidos no Próprio Banco ...´
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)