Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Mehrere Editfelder gleichzeitig initialisieren (https://www.delphipraxis.net/199887-mehrere-editfelder-gleichzeitig-initialisieren.html)

delphicoder123 27. Feb 2019 22:08

Mehrere Editfelder gleichzeitig initialisieren
 
Hallo,
nehmen wir an, ich habe 3 Editfelder(edit1, edit2, edit3). Alle Editfelder will ich mit dem String "Text" befüllen.
Anstatt die Editfelder einzeln zu befüllen, sollen die Editfelder über eine for-Schleife initialisiert werden.
Wie bekomme ich das hin?
So sieht aktuell mein Code aus:

Code:
 procedure TForm1.Button1Click(Sender: TObject);
 var i:Integer;
begin
  for i := 1 to 3 do
  begin
      edit1.Text:='text';
  end;

end;

Schokohase 27. Feb 2019 22:12

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Das wurde schon 1000mal gefragt und 1001mal beantwortet. Bitte bemühe doch mal die Suche im Forum oder einer Suchmaschine

scrat1979 27. Feb 2019 22:28

AW: Mehrere Editfelder gleichzeitig initialisieren
 
FindComponent ist dein Freund :)

p80286 27. Feb 2019 22:48

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Zitat:

Zitat von Schokohase (Beitrag 1426571)
Das wurde schon 1000mal gefragt und 1001mal beantwortet. Bitte bemühe doch mal die Suche im Forum oder einer Suchmaschine

Nichts für ungut, wer lang genug dabei ist, wird schon danach suchen, bzw.eine ungefähre Vorstellung davon haben wonach er suchen muß. Er als Frischling darf mM nach schonmal fragen.

Gruß
K-H

Andreas L. 28. Feb 2019 10:11

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von delphicoder123 (Beitrag 1426569)
Hallo,
nehmen wir an, ich habe 3 Editfelder(edit1, edit2, edit3). Alle Editfelder will ich mit dem String "Text" befüllen.
Anstatt die Editfelder einzeln zu befüllen, sollen die Editfelder über eine for-Schleife initialisiert werden.
Wie bekomme ich das hin?
So sieht aktuell mein Code aus:

Code:
 procedure TForm1.Button1Click(Sender: TObject);
 var i:Integer;
begin
  for i := 1 to 3 do
  begin
      edit1.Text:='text';
  end;

end;

Wie scrat1979 schon geschrieben hat, kannst du das via FindComponent machen.

Ich hab auf die schnelle folgende Routine geschrieben:
Delphi-Quellcode:
procedure TfrmMain.SetEditsText(AText: String; AName: String;
  AStartIndex: Integer = 1; AEndIndex: Integer = 1);
var
  CurrentIndex: Integer;
  CurrentEdit: TEdit;
  CurrentComponent: TComponent;
begin
  for CurrentIndex := AStartIndex to AEndIndex do
  begin
    CurrentComponent := FindComponent(AName + IntToStr(CurrentIndex));
    if Assigned(CurrentComponent) and (CurrentComponent is TEdit) then
    begin
      CurrentEdit := TEdit(CurrentComponent);
      CurrentEdit.Text := AText;
    end;
  end;
end;
So wird die Funktion z. B. in einem Button OnClick-Event aufgerufen:
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
begin
  SetEditsText(
    'Neuer Text',
    'Edit',
    1,
    3 
  );
end;
Mit diesem Aufruf würden die Edits Edit1, Edit2 und Edit3 den Text 'Neuer Text' zugewiesen bekommen.

Im Anhang ist das komplette Demo-Projekt inkl. EXE.

peterbelow 28. Feb 2019 10:59

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Zitat:

Zitat von delphicoder123 (Beitrag 1426569)
Hallo,
nehmen wir an, ich habe 3 Editfelder(edit1, edit2, edit3). Alle Editfelder will ich mit dem String "Text" befüllen.
Anstatt die Editfelder einzeln zu befüllen, sollen die Editfelder über eine for-Schleife initialisiert werden.
Wie bekomme ich das hin?
So sieht aktuell mein Code aus:

Code:
 procedure TForm1.Button1Click(Sender: TObject);
 var i:Integer;
begin
  for i := 1 to 3 do
  begin
      edit1.Text:='text';
  end;

end;

Ich benutze für sowas meist eine Funktion wie die hier:
Delphi-Quellcode:
procedure FillEditcontrols(const aText:string; const A: array of TCustomedit);
var
  i: integer;
begin
  for i:= Low(A) to High(A) do
    A[i].Text := aText;
end;
Aufgerufen aus einer Methode des Forms z. B. mit

Delphi-Quellcode:
  FillEditcontrols(String.empty,[edit1, edit2, edit3, memo1]);
Der Vorteil ist hier, dass dieses Verfahren auch funktioniert, wenn die Controls sprechende Namen haben und nicht diese nutzlosen automatisch erzeugten Namen, und es funktioniert auch mit beliebig vielen Controls.

Pfaffe 28. Feb 2019 12:45

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Beispiel für beliebig viele Controls, z.B. TEdits, die auf einem Panel liegen:
Delphi-Quellcode:
for i:= 0 to Panel_Filter.ControlCount-1 do begin
  if Panel_Filter.Controls[i] is TLabel then
    (Panel_Filter.Controls[i] as TLabel).Font.Style:= []
  else if Panel_Filter.Controls[i] is TEdit then
    (Panel_Filter.Controls[i] as TEdit).Text:= ''
  else if Panel_Filter.Controls[i] is TMaskEdit then
    (Panel_Filter.Controls[i] as TMaskEdit).Text:= ''
  else if Panel_Filter.Controls[i] is TCheckBox then
    (Panel_Filter.Controls[i] as TCheckBox).Checked:= false
  else if Panel_Filter.Controls[i] is TComboBox then
    (Panel_Filter.Controls[i] as TComboBox).ItemIndex:= 0;
end;

TigerLilly 1. Mär 2019 07:36

AW: Mehrere Editfelder gleichzeitig initialisieren
 
Vielleicht ist DuckTyping da ein gutes Stichwort.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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