Diese Arrays für Komponenten oder Controls sind doch Käse!
Sorry, aber ich muss immer wieder feststellen, dass viele die Kurve zu
OOP nicht kriegen.
Dabei gibt es neben
TObjectList auch die Klasse
TComponent.
Damit kann man die Objekte sehr elegant und mit geringstem Aufwand verwalten.
Hier ein Beispiel wie man TComponent als Ersatz für das Array benützt:
Delphi-Quellcode:
type
TForm1 = class(TForm)
ButtonControlsErzeugen: TButton;
ButtonControlsLoeschen: TButton;
procedure FormCreate(Sender: TObject);
procedure ButtonControlsErzeugenClick(Sender: TObject);
procedure ButtonControlsLoeschenClick(Sender: TObject);
private
{ Private-Deklarationen }
FMyList : TComponent; // Ersatz für Array
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
FMyList := TComponent.Create(Self);
// Besitzer ist das Formular; FMyList braucht also nicht freigegeben werden
end;
procedure TForm1.ButtonControlsErzeugenClick(Sender: TObject);
var
i : Integer;
lbl : TLabel;
edt : TEdit;
begin
// dynamisch Komponenten erzeugen und in die Liste packen
for i := 0 to 10 do
begin
lbl := TLabel.Create(FMyList {<==});
lbl.Caption := Format('Label %d',[i]);
lbl.Top := i * 15;
lbl.Left := i * 9;
lbl.Parent := Self;
end;
for i := 0 to 10 do
begin
edt := TEdit.Create(FMyList);
edt.Text := Format('Edit %d',[i]);
edt.Top := i * 15;
edt.Left := 300 - i * 20;
edt.Parent := Self;
end;
end;
procedure TForm1.ButtonControlsLoeschenClick(Sender: TObject);
begin
// alle Komponenten in der Liste zerstören
FMyList.DestroyComponents;
end;
Auch die Typsicherheit lässt sich ganz einfach durch Ableiten von TComponent herstellen.
Bei Interesse kann ich das zeigen.