Fórum Evento onExit dos DBEdits no speedbutton #362911

24/08/2008

0

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.


Welder.

Welder.

Responder

Posts

24/08/2008

Marco Salles

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>


Responder

Gostei + 0

24/08/2008

Welder.

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?


Responder

Gostei + 0

24/08/2008

Welder.

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.


Responder

Gostei + 0

24/08/2008

Marco Salles

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 :

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 ...´


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar