Home » Tipps & Tricks » Komponenten » Allgemein » Zugriffsmethoden auf Komponenten

Zugriffsmethoden auf Komponenten

Normalerweise greift man über die Referenzvariable mit einem Punkt auf die einzelnen Eigenschaften und Methoden zu.Es gibt allerdings auch Alternativen, die in diesem Artikel vorgestellt werden.Möchte man beispielsweise sämtliche Buttons auf dem Formular inaktiv stellen, kann das Komponenten-Array „Components“ durchgelaufen werden:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I:=0 to ComponentCount-1 do
    if Components[I] is TButton then
      TButton(Components[I]).Enabled:=False;
end;

Dabei werden auch Komponenten erfasst, bei denen der Parent nur indirekt das Formular ist. ComponentCount enthält die Anzahl der Komponenten, die sich auf dem Formular befinden. Bei „Components“ handelt es sich um ein Array, mit deren Hilfe es möglich ist, auf alle Komponenten zuzugreifen. Vorher muss geprüft werden, um welchen Komponenten-Typ es sich handelt.Da es sich bei einem Button um eine von TControl abgeleitete Komponente handelt, kann man auch das Array „Controls“ verwenden. Dabei ist aber zu beachten, dass nur die Controls erfasst werden, die das Formular als direkten Parent haben:

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I:=0 to ControlCount-1 do
   if Controls[I] is TButton then
     TButton(Controls[I]).Enabled:=False;
end;

So kann die Suche auch auf Komponenten beschränkt werden, die sich beispielsweise auf einer Groupbox befinden:

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
begin
 for I:=0 to Groupbox1.ControlCount-1 do
   if Groupbox1.Controls[I] is TButton then
     TButton(Groupbox1.Controls[I]).Enabled:=False; 
end;

Eine andere Möglichkeit stellt die Methode „FindComponent“ dar. Sie erwartet als Parameter den Namen der Komponente als String, ist allerdings ind er Ausführung auch langsamer als die oben vorgestellten Lösungen.Folgendes Beispiel zeigt, wie Sie den Text der Edit-Felder „Edit1“ bis „Edit10“ manipulieren:

procedure TForm1.Button1Click(Sender: TObject);
var
 I: Integer;
 Edit: TComponent;
begin
 for I:=1 to 10 do
 begin
   Edit:=FindComponent('Edit'+IntToStr(I));
   if Edit is TEdit then
     TEdit(Edit).Text:=Format('Dies ist Edit "Edit%d"',[I]);
 end;
end;

Beachten Sie, dass bei allen Lösungen Typen von TComponent zurückgegeben werden. Es Bedarf vor einem Typecast einer Prüfung, ob es sich bei der Komponente wirklich um den erwarteten Typ handelt!Um das in der Tabulatorreihenfolge nächste Control zu ermitteln, benutzen Sie die TWinControl-Methode „FindNextControl“.