Evento onExit dos DBEdits no speedbutton
Bom
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.
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.
Curtidas 0
Respostas
Marco Salles
24/08/2008
Voce deve forçar o foco para que ele saia do Controle Ativo.
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>
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
Welder.
24/08/2008
Bem,
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?
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
Welder.
24/08/2008
Bem
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.
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
Marco Salles
24/08/2008
O poblema não é so exclusivo de componentes que não recebem o foco
<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 :
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 ...´
<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