Komponente über Namen ansprechen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Der_Niederrheiner
Beiträge: 2
Registriert: So 20. Sep 2015, 15:43

Komponente über Namen ansprechen

Beitrag von Der_Niederrheiner »

Hallo,

ich suche nach einer Möglichkeit, einen Button über seinen Namen anzusprechen. Ich habe in meinem Projekt einen Haufen Buttons und bislang sieht das so aus:

Code: Alles auswählen

 
Button1.Caption := 'xxx';
Button2.Caption := 'xxx';
Button3.Caption := 'xxx'
 
usw.

Ich möchte natürlich jetzt lieber eine Schleife programmieren und die Buttons über ihre fortlaufende Nummer anprechen. Wie bekomme ich das hin?

Gruß

Der Niederrheiner

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Komponente über Namen ansprechen

Beitrag von Michl »

Ich halte zwar persönlich nicht viel davon Componenten zu suchen (würde diese lieber in einer Liste oder Array halten), ist aber prinzipiell möglich:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  aComponent: TComponent;
begin
  aComponent := FindComponent('Button' + IntToStr(2));
  if Assigned(aComponent) and (aComponent is TButton) then
    TButton(aComponent).Click;
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komponente über Namen ansprechen

Beitrag von Mathias »

Ich möchte natürlich jetzt lieber eine Schleife programmieren und die Buttons über ihre fortlaufende Nummer anprechen. Wie bekomme ich das hin?
Werden die Button zur Laufzeit erzeugt oder über den Formular-Designer ?

Wen es zur Laufzeit ist, kann man auch eine Button-Array machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Der_Niederrheiner
Beiträge: 2
Registriert: So 20. Sep 2015, 15:43

Re: Komponente über Namen ansprechen

Beitrag von Der_Niederrheiner »

Hallo,

danke für die Antworten.
Die Buttons werden bereits im Formular erzeugt.
Die Lösung von Michl ist also genau das, was ich gesucht habe.

Antworten