Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Objekt ohne genauen namen aufrufen?
pyto - Mo 05.04.10 18:59
Titel: Objekt ohne genauen namen aufrufen?
Hallo,
Ich bin am verzweifeln. Niemand hatte scheinbar jemals dieses Problem. Internet ist leer.
Angenommen ich habe 13567289 Buttons in meiner Form und Jeder Button hat einen Namen der sich aus 'Button' und seiner Nummer zusammensetzt, und ich will nun mit einer For-Schleife einen Button ansprechen der die Nummer von i hat (I ist die schleifenvariable) , und ich ja nicht für jedes i schreiben kann:
Delphi-Quelltext
1:
| if i= [1,2,3,usw] then button[1,2,3,usw].irgendwas:=irgendwas; |
(bei 13567289 Buttons wäre das
sehr viel arbeit), suche ich eine syntax im format
Quelltext
1:
| Nmensteil1 + Namesnteil 2 + Variable + Variable |
oder so ähnlich ...
Würde mich sehr freuen wenn jemand so einen code hat.
falls jemand meint das das nicht geht, so poste er das bitte auch hier... ich warte sonst ja ewig :? :) :roll:
Vielen Dank
Gausi - Mo 05.04.10 19:02
Hallo und :welcome: in der Entwickler-Ecke,
Schau dir mal FindComponent an. Damit sollte das in einer Schleife gehen. :D
pyto - Di 06.04.10 08:14
Danke für den tipp,
ich probiers mal... 8) :idea:
pyto - Mi 07.04.10 09:22
pyto hat folgendes geschrieben : |
Danke für den tipp,
ich probiers mal... 8) :idea: |
Hat geklappt... :!: :idea: :lol: :wink:
Xion - Mi 07.04.10 09:54
Du könntest die Buttons auch als Array machen, was wohl auch beim Form erstellen einfacher wäre:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var Buttons: array of TButton; ... SetLength(Buttons,1234567); for A:= 0 to High(Buttons) do begin Buttons[A]:=TButton.Create(Form1); Buttons[A].Parent:=Form1; Buttons[A].Left:=A*10; Buttons[A].Top:=0; Buttons[A].Width:=10; Buttons[A].Height:=10; Buttons[A].Tag:=A; Buttons[A].Caption:=inttostr(A); Buttons[A].OnClick:=AllButtonsOnClick; end; |
Das ansprechen wäre dann sehr einfach
Delphi-Quelltext
1:
| Buttons[4].Caption:='x'; |
oder
Delphi-Quelltext
1: 2:
| for A:= 0 to 25 do Buttons[4].Caption:='y'; |
und wenn du z.B. den Sender aus ner OnClick kriegst:
Delphi-Quelltext
1: 2:
| if (Sender is TButton) then id:=TButton(Sender).Tag |
Tilo - Mi 07.04.10 13:07
Xion hat folgendes geschrieben : |
oder
Delphi-Quelltext 1: 2:
| for A:= 0 to 25 do Buttons[4].Caption:='y'; |
|
Da war sicherlich folgendes gemeint:
Delphi-Quelltext
1: 2:
| for A:= 0 to 25 do Buttons[A].Caption:='y'; |
Entschuldigung für die Besserwisserei,
Ich freue mich wenn ich auch mal was konstruktives so kurz nach dem Mittag posten kann.
Tropby - Mi 07.04.10 13:38
Delphi-Quelltext
1:
| Nmensteil1 + Namesnteil 2 + Variable + Variable |
Wenn du das so in der Art machen möchtest hätte ich noch folgende lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function TForm1.GetComponentByName(Name : String) : TComponent; var I : Integer; begin Result := nil; for I := 0 to Form1.ComponentCount - 1 do if Form1.Components[I].Name = Name then Result := Form1.Components[I]; end;
procedure TForm1.Button1Click(Sender: TObject); begin TPanel(GetComponentByName(Edit1.Text)).Caption := '####'; end; |
Narses - Mi 07.04.10 13:49
Moin!
Dann aber bitte Resourcen-schonender und etwas allgemeiner: ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function GetComponentByName(AForm: TForm; const AName: String): TComponent; var i: Integer; begin for i := 0 to AForm.ComponentCount -1 do begin Result := AForm.Components[i]; if (Result.Name = AName) then Exit; end; Result := NIL; end;
procedure TForm1.Button1Click(Sender: TObject); begin TPanel(GetComponentByName(Self,Edit1.Text)).Caption := '####'; end; |
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!