![]() |
Mehrere Objekte Ansprechen:Beispiel Buttons !
Hallo Leute !
Dies ist mein erster Beitrag hier,ich hoffe auf ein gutes Verhältnis. Freut mich hier zu sein,bei euch Pros. :-D Hab eine Frage,wegen der ich gestern fast geheult habe. Wie kann ich Objekte,also Labels und Buttons per Integer ansprechen? Beispiel: Ich habe 3 Buttons (button1,button2,button3).Ich möchte per for-Schleife die Caption aller auf "test" ändern. So gings nicht: ###
Delphi-Quellcode:
###
var a:integer
procedure ... begin for a:=1 to 3 do tbutton('button' + inttostr(a)).caption:='test' end; Wie schaft man das? :pale: |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
FindComponent lautet das Zauberwort :mrgreen:
Delphi-Quellcode:
Florian
var
i: integer begin for i := 1 to 3 do TButton(FindComponent('Button' + IntToStr(i))).Caption := 'test'; end; |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
mach doch n Array [1..3] of label .... oder versuche findcomponente
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Boah danke Florian. :o :-D Vielen Dank !
PS:Teron dein Tip ist auch nicht schlecht ! :shock: An sowas hab ich bis jetzt noch nicht gedacht! |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
:zwinker: :mrgreen: |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
FindComponent ist ein recht schlechter Stil. ;)
Strings vergleichen dauern relativ lange, vor allem wenn man sequentiell durch das ganze Components-Array durch muss. Wenn du die Komponenten, die du brauchst, in ein Array packst, hast du indizierten Zugriff, das heißt das Ganze geht sehr viel schneller. Nebenbei: Die wenigsten hier sind Pros. Ich zum Beispiel bin keiner. ;) |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Mir erschließt sich in puncto Arrays eine neue Frage,die im Prinzip auf die obere verweist:
Wenn ich 50 Buttons(button1,button2,...) habe,dann muss ich die ja noch in den Array[1..50] of Buttons alle EINZELN per Hand eintragen.Wie kann ich das in einer FOR-Schleife machen und den Integer gleich nutzen? ungefähr:
Delphi-Quellcode:
Mein Hauptproblem ist,wie ihr merkt,wie ich Integer oder Strings in Componentnamen umforme. :cry:
for i:=1 to 50 do ArrayDerButtons[i]:=tbutton('button'+inttostr(i));
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
dann musst du wohl doch Findcomponent nehmen, allerdings nur einmal um in den Array einzulesen. Alternative wär halt alles einzeln zu machen.
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
bei onCreate einmalig per FindCompo ins array/liste und danach einfach das array (bzw. die liste) durchlaufen .. evtl. auch erst im onCreate erstellen (dann natürlich gleich "im array erstellen") |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
kann man den buttonnamen nicht als array definnieren??? probiers gleich mal aus
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
mfg Christian |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Falls das deine einzigen Buttons auf der Form sind kannst du das auch so machen:
Delphi-Quellcode:
Aber das Array ist glaube ich schneller.
for i:=0 to form1.ComponentCount -1 do
begin if form1.Components[i] is TButton then // mach etwas mit TButton(form1.Components[i]).Caption end; Zitat:
Zitat:
Aber man kann ja ein Ziel haben. :-D |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Ich habe noch eine komplexe Frage,ich hoffe ich nerve euch nicht,denn die Fragen
quälen mich schon seit langem und ich arbeite gerade an einem Projekt,für welches ich diese Erkenntisse brauche. +++++ Ich weiß jetzt wie ich Strings in Componentennamen umsetze(Findcomponent) aber wie mache ich es andersrum? Konkretes Beispiel: Ich habe 3 Buttons,button1,button2,button3.Wie kann ich beim Klick auf einen der Buttons dessen Namen in einem Label ausgeben und zwar wenn ich es nicht konkret sonder abstrakt per Abfrage des Senders mache? :o :?: :| Etwa in der Art:
Delphi-Quellcode:
var a:string;
begin a:=String(Sender as Tbutton); label1.caption:=a; |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
Delphi-Quellcode:
If (Sender is TButton) then
a := (Sender as TButton).Name; |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Vielen Dank.
Ich hab übrigens gedacht es ist von Vorteil,wenn ich mehrere Fragen zu einem Komplex in einen Thread mache. :mrgreen: |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
hmm ist aber ungewöhnlich übrigens kannst du das mit dem nerven wieder vergessen, da die dp tag ein tag aus ganz allein von leuten lebt die frragen haben und anderen Leuten die darauf antworten können
|
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Zitat:
Delphi-Quellcode:
Gruß
label1.caption := TButton(Sender).Name;
Matthias |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Delphi-Quellcode:
Uwe
procedure TForm1.Button1Click(Sender: TObject);
begin if (Sender is TButton) then Label1.Caption := (Sender as TButton).Name; end; |
Re: Mehrere Objekte Ansprechen:Beispiel Buttons !
Moin auch!
Machs so:
Delphi-Quellcode:
Dabei nicht vergessen: Durch den With darf deine Variable vom Namen her nicht in TButton und den Vorfahrklassen vorhanden sein darf.
Var lName : String;
begin With Sender As TButton Do lName:=Name; Label1.Caption:=lName; Stefan Oh, es gab noch eine zweite Seite. :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz