Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   bucle entre edit.change y edit.change (https://www.clubdelphi.com/foros/showthread.php?t=55058)

alremo81 07-04-2008 12:07:03

bucle entre edit.change y edit.change
 
Buenas a todos:
Estoy realizando un programa con varios edit en el form y se trata de cambiar el edit.text de los edit cuando uso el evento edit.changed de uno y asi con todos. pero tengo el problema que entra en un bucle infinito, Porque al cambiar un edit.text se cambian todos los demas, pero al cambiarse los demas ellos tambien llaman a su propio evento edit.changed y vuelve a cambiarlos todos y asi sucesivamente.

Estoy de practicas en una empresa y me han pedido este ejercicio y estoy parado, Agradeceria mucho una ayuda rapida.

Gracias de antemano.

codigo de ejemplo por si no lo habeis entendido:

Cita:

procedure TForm1.edit1Change(Sender: TObject);

edit2.text := 'aaaa';
edit3.text := 'bbbb';

procedure TForm1.edit2Change(Sender: TObject);

edit1.text := 'cccc';
edit3.text := 'dddd';

procedure TForm1.edit1Change(Sender: TObject);

edit1.text := 'eeee';
edit3.text := 'ffff';

defcon1_es 07-04-2008 13:49:35

Siguiendo tu mismo ejemplo, asi, de cabeza se me ocurre lo siguiente:

Código Delphi [-]
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin // el valor de la propiedad tag lo usamos para decidir si 
// se hace algo en el OnChange de cada Edit
 TEdit(Sender).Tag := 1;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin   
  if TEdit(Sender).Tag = 1
  then begin     
    Edit2.Tag := 0;     
    Edit2.Text := 'bbbbb';
    Edit3.Tag := 0;
    Edit3.Text := 'ccccc';
  end;
  TEdit(Sender).Tag := 0;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin  
  if TEdit(Sender).Tag = 1
  then begin     
    Edit1.Tag := 0;     
    Edit1.Text := 'fffff';
    Edit3.Tag := 0;
    Edit3.Text := 'hhhhh';
  end;
  TEdit(Sender).Tag := 0;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin   
  if TEdit(Sender).Tag = 1
  then begin     
    Edit1.Tag := 0;     
    Edit1.Text := 'xxxxx';
    Edit2.Tag := 0;
    Edit2.Text := 'yyyyy';
  end;
  TEdit(Sender).Tag := 0;
end;

ContraVeneno 07-04-2008 15:25:39

Yo lo programaría en un solo edit, utilizando el objeto Sender en lugar de el nombre del control.

Luego asignar ese evento a todos los demás.


La franja horaria es GMT +2. Ahora son las 20:42:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi