![]() |
Zählvariable für labels/editfelder, etc
Ich habe bisher ein Programm, dass per Klick auf einen Button, Label, was man auf nehmen will, durch eine Funktion eine weitere Zeile hinzufügt. Eine "Zeile" sind in diesem Fall 1 Label, 1 Edit-Feld, 1 Panel, 2 Edit-Felder, 1 Label, 1 Edit-Feld.
Am Anfang habe ich 5 Zeilen, die so aufgebaut sind. (Versteht man noch, oder?) Bis da kann ich ja die Edit-Felder einfach zählen, also ich kann sagen edit12.text:='Hallo'; Wenn ich jetzt aber über meine 20 edits hinausgehe, indem ich einmal diese Funktion aufrufe, kriege ich ja insgesamt weitere 4 Edits (Namen sind dann bei Edit21, Edit22, etc.) Wie kann ich da jetzt weitermachen? Also ich kann jetzt immer noch sagen edit22.text:='Hallo', aber ich habe keine Lust 22 mal zu schreiben, edit1.text:='...'; edit2.text:='...'; außerdem ist das ja beliebig erweiterbar, also man kann beliebig viele Zeilen hinzufügen... Ist es möglich eine Zählvariable in diesen edit-Namen einzubringen? Also quasi edit[x].text:='Hallo'; ?? Jetzt nicht in der Form, aber ist das generell möglich? |
Re: Zählvariable für labels/editfelder, etc
Es gibt die Funktion: FindComponent
Delphi-Quellcode:
Habe ihn nicht getestet, aber müsste so in etwa funktionieren ;)
var a:TObject; i:Integer;
for i:=0 to 22 do begin a:=FindComponent('Edit'+inttostr(i)); (a as TEdit).Text:='Hallo'; end; |
Re: Zählvariable für labels/editfelder, etc
Hallo,
was ich schreibe bezieht sich auf Delphi. Ob das so unter Lazarus geht, weiß ich nicht, denke aber schon. Du kannst die Edits in einem "array of TEdit" verwalten und dieses in einer Schleife durchgehen:
Delphi-Quellcode:
Du kannst jedoch auch
var EdtArray: array of TEdit;
SetLength(EdtArray, 22); for i := 0 to Length(EdtArray) - 1 do EdtArray[i].Text := 'Hallo'; ![]()
Delphi-Quellcode:
Oder so ähnlich. ;)
for i := 1 to 22 do
(FindComponent('Edit' + IntToStr(i)) as TEdit).Text := 'Hallo'; Grüße, Matze |
Re: Zählvariable für labels/editfelder, etc
Hallo,
Delphi-Quellcode:
jetzt kannst Du per Schleife und EditArray[i] auf alle Eigenschaften Deiner Edits zugreifen.
var
EditArray : array of TEdit; n : Integer; ... n := 22; // für 22 TEdit-Componenten ... procedure Form1.FormCreate(.... var i : Integer; begin SetLength(EditArray, n); // n = Anzahl der verwendeten TEdits for i := 0 to n-1 do EditArray[i] := FindComponent(Format('Edit%d', [i])) as TEdit; end; Dies gilt natürlich auch für alle anderen Componenten., die Du entsprechend behandelst. z.B.
Delphi-Quellcode:
var
i : Integer; begin for i := 0 to n-1 do begin if i mod 2 = 0 then EditArray[i].Font.Color := clRed // alle geradzahligen TEdits : Schriftfarbe Rot else EditArray[i].Font.Color := clBlack; // alle ungeradzahligen TEdits : Schriftfarbe Schwarz EditArray[i].Text := ....... // Textzuweisung end; end; |
Re: Zählvariable für labels/editfelder, etc
Mhm, ich kann mit der Methode keine neu erstellten Edits finden. Sobald ich ein Edit neu erstelle, ist es total egal, wie es heißt, es wird nicht mit findcomponent gefunden und er bricht mit 'ner Exception ab. Er springt im "control.inc" Quelltext zur Zeile
Delphi-Quellcode:
und färbt die grau ein...
if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf)
|
Re: Zählvariable für labels/editfelder, etc
Hallo,
in den Tutorials ist eine kleine Anweisung zum Umgang mit Controls per Array. ![]() ein Demo ist auch dabei. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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-2025 by Thomas Breitkreuz