Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi edit1.....edit20 nacheinander zuweisen? (https://www.delphipraxis.net/118064-edit1-edit20-nacheinander-zuweisen.html)

imag 30. Jul 2008 23:25


edit1.....edit20 nacheinander zuweisen?
 
So nach langer ergebnisloser Suche stelle ich die Frage nun hier.

Folgende Situation:
Ich habe ein Formular mit nummerierten Edits, nennen wir sie mal input1 bis input20.
Wie kann ich jetzt, ohne
input1.text:='asdasd';
input2.text:='asdasd';
.........

jedes Feld nacheinander ansprechen (am besten mit einer while oder for Schleife)?

Danke fuer jede Hilfe =)

sx2008 31. Jul 2008 00:10

Re: edit1.....edit20 nacheinander zuweisen?
 
Immer wenn man viele Edit-Felder gleichartig ansprechen will, sollte man sich fragen,
ob TEdit hier überhaupt die beste Lösung ist.
Mit einen StringGrid kann man sehr viele Daten anzeigen und editieren.
Ein Vorteil beim StringGrid ist, dass man die Daten bequem in einer Schleife lesen & schreiben kann.

Also erzähl doch mal, was für Daten angezeigt/editiert werden sollen.

Kalakmul 31. Jul 2008 00:38

Re: edit1.....edit20 nacheinander zuweisen?
 
Eine prinzipielle Lösung ist die Verwendung des FindComponent-Befehls.

Etwa so:

Delphi-Quellcode:
var
  AEdit: TEdit;
  Nr: Integer;

begin
  for Nr := 1 to 20 do
  begin
    AEdit := TEdit(FindComponent('input' + IntToStr(Nr)));
    AEdit.Text := 'asdasd';
  end;
end;

Medium 31. Jul 2008 01:18

Re: edit1.....edit20 nacheinander zuweisen?
 
Wenn es Edits sein sollen, und nicht wie vorgeschlagen eine Form von Liste oder Grid, und sehr oft etwas zugewiesen werden soll, dann kann es sich auch lohnen die Edits in einem array of TEdit zu "sammeln", statt das recht kostspielige FindComponent zu benutzen. Zumal da du dann die Edits auch sinnvoll und beliebig benennen kannst fände ich das schon ästhetischer ;)

marabu 31. Jul 2008 05:51

Re: edit1.....edit20 nacheinander zuweisen?
 
Moin,

das mit dem Array ist eine gute Idee:

Delphi-Quellcode:
procedure SetEditText(owner: TComponent; const value: string); overload;
var
  i: Integer;
begin
  with owner do
    for i := 0 to Pred(ComponentCount) do
      if Components[i] is TEdit then
        TEdit(Components[i]).Text := value;
end;

procedure SetEditText(parent: TWinControl; const value: string); overload;
var
  i: Integer;
begin
  with parent do
    for i := 0 to Pred(ControlCount) do
      if Controls[i] is TEdit then
        TEdit(Controls[i]).Text := value;
end;

procedure TDemoForm.OwnerButtonClick(Sender: TObject);
begin
  with Sender as TButton do
    SetEditText(TComponent(self), Caption);
end;

procedure TDemoForm.ParentButtonClick(Sender: TObject);
begin
  with Sender as TButton do
    SetEditText(TWinControl(self), Caption);
end;
Zum Testen einfach ein paar Edits auf der Form verteilen, davon ein paar auf ein Panel legen.

Grüße vom marabu

mimi 4. Aug 2008 12:38

Re: edit1.....edit20 nacheinander zuweisen?
 
Bei der Methode kann man aber schlecht auswählen welche Edits alle den gleichen wert haben sollen. Evlt. soll ja nicht alle Edits sondern nur bestimmte Berücksichtig werden.
Hier mein Vorschlag:
Delphi-Quellcode:

Var
  Items:array [0..5] of TEdit
...
procedure SetEdits(aIndex:Integer; aEdit:TEdit);
var
  i:Integer;
begin
  for i:=0 to 5 do begin
    Items[i]:=aEdit;
  end; // for
end;

// Beispiel
procedure InitEditArray;
begin
  items[0]:=Edit1;
  items[1]:=Edit5;
  items[2]:=Edit7;
  ....
end;
Ist zwar nicht so sauber, aber auch eine Lösung.
So kann genau gewählt werden, welche Edits mit alle Edits gemeint sind.
Wenn es noch einfacher sein soll, dann würde ich eine TObjectListe nehmen.
Achja in SetEdits verwende ich einfach Pointer. Also wird kein Speicher verschwendet bzw. nicht so viel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz