![]() |
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 =) |
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. |
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; |
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 ;)
|
Re: edit1.....edit20 nacheinander zuweisen?
Moin,
das mit dem Array ist eine gute Idee:
Delphi-Quellcode:
Zum Testen einfach ein paar Edits auf der Form verteilen, davon ein paar auf ein Panel legen.
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; Grüße vom marabu |
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:
Ist zwar nicht so sauber, aber auch eine Lösung. 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; 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 11:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz