Cita:
Empezado por alexglez1255
Hola jovenes tengo una pregunta,...
|
Se agrace...
Es inevitable que el uso del método
Clear dispare el evento
OnChange ya que el contenido del
TEdit cambia. Y si esto lo haces dentro del evento
OnChange....
Una forma de que funcione (
aunque me desagrada en absoluto ) es desasignar el evento antes de la llamada al método
Clear y reasignarlo luego:
Código Delphi
[-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
tn : TNotifyEvent;
tmp: Integer;
begin
width logicanegocio do
begin
case cmbBusqCte.ItemIndex of
0: begin
if not TryStrToInt(edtBuscarCte.Text, tmp) then
try
ShowMessage('En el campo de Codigo solo puede escribir numeros');
tn := edtBuscarCte.OnChange; edtBuscarCte.OnChange:= nil; edtBuscarCte.Clear; Exit;
finally
edtBuscarCte.OnChange := tn; end;
CDSclieCOD.Locate( 'CUSTNO', edtBuscarCte.Text,[loPartialKey] );
end;
1: begin
DBGrid1.Visible := True;
CDSclieCOD.Locate( 'COMPANY', edtBuscarCte.Text,[loPartialKey] );
CDSclieCOD.Filtered := False;
CDSclieCOD.Filter := Format( 'COMPANY LIKE %s ', [ QuotedStr(edtBuscarCte.Text + '%' ) ] );
CDSclieCOD.Filtered := True;
end;
end;
end;
end;
Lo que yo haría es avisar del error y dejar que el usuario lo corrija:
Código Delphi
[-]
procedure Taltadecontratos.edtBuscarCteChange(Sender: TObject);
var
tmp: Integer;
begin
width logicanegocio do
begin
case cmbBusqCte.ItemIndex of
0: begin
if not TryStrToInt(edtBuscarCte.Text, tmp) then
begin
ShowMessage('En el campo de Codigo solo puede escribir numeros');
edtBuscarCte.SetFocus;
Exit;
end;
CDSclieCOD.Locate( 'COD_CLIENTE', edtBuscarCte.Text,[loPartialKey] );
end;
1: begin
DBGrid1.Visible := True;
CDSclieCOD.Locate( 'CLIENTE', edtBuscarCte.Text,[loPartialKey] );
CDSclieCOD.Filtered := False;
CDSclieCOD.Filter := Format( 'CLIENTE LIKE %s ', [ QuotedStr(edtBuscarCte.Text + '%' ) ] );
CDSclieCOD.Filtered := True;
end;
end;
end;
end;
Por otro lado, el primer código es poco amable con el usuario. Imagina que lleva ingresado:
0123456789a.
¿ Por que borrarle todo el contenido si solo tiene un caracter erroneo ?
Saludos
