Labels Durchnummerieren
-
Hi,
ist es möglich das ich z.B. 10 labels mit ner for schleife beschriften kann? ohne das ich jedes einzelene aufrufen muss? mit so ner Art Array?Zur Zeit sieht das bei mir so aus
label1->Caption=1; label2->Caption=2; label2->Caption=3; usw.Gibt es nicht ne möglichkeit das in etwa so zu machen?
for(int i=0,i<10,i++) label[i]->Caption=i;
-
Siehe FAQ, "Komponenten zur Laufzeit erstellen" usw.
-
Hm.. Also ich hab da jetzt nichts gefunden was mir jetzt nützlich sein könnte. Ich will ja keine Labels erstellen, sondern Exestierende Labels wärend der Laufzeit beschrift.
-
Hallo
das Prinzip ist das selbe. Du must eben in Konstruktor des Frames die bereits existierenden Labels in das Array schreiben.
Danach kannst du belibig oft iterierend auf das Array mit den labels zugreifen.bis bald
akari
-
Wärst du denn so freundlich mir ein kleines bespiel mal zu tippen? irgenwie raff ich das nicht so ganz.

-
Hallo
in der Header-Datei des Forms das Array deklarieren
... private : ... const int labelcount = 3; // Feste Anzahl der betreffenden Labels TLabel* labels[labelcount]; // Array mit Label-Pointern public : ...Dann im Konstruktor das Array füllen
void __fastcall TForm1::TForm1(TObject* Sender) { labels[0] = Label1; // Erstes Label als erstes Element in Array eintragen labels[1] = Label2; // Zweites Label als zweites Element in Array eintragen ... labels[2] = Label3; // Letztes Label als letztes Element in Array eintragen }Dann kannst du zur Laufzeit in den methoden des Forms jederzeit über das Array iterieren
... for (int lv = 0; lv < labelcount; ++lv) { labels[lv]->Caption = "Label " + IntToStr(lv) } ...bis bald
akari
-
Du kannst aber auch
TLabel *label = (TLabel*)FindComponent("label"+IntToStr(nr)); if(label) label->Caption = "text"+IntToStr(nr);verwenden.
Aber professioneller ist schon die von akari gezeigte Methode,
wobei es noch besser wäre, wenn die Labels dann auch gleich zur Laufzeit erzeugt werden (anstatt der Einzelzuweisung - bei 10 geht's ja noch, aber bei größerer Anzahl ???)
-
Das mit den 10 war nur ein beispiel es sind eigenlich über 240. und da ist es etwas mühselig jedes einzelene in array abzulegen
-
Hallo
deshalb ist es ja auch besser, alle so betroffenen Labels dynamisch (ebenfalls in einer Schleife) anzulegen.
bis bald
akari
-
Je nach gewünschtem Layout können die erforderlichen, u.U. mehrfach verschachtelten Schleifen aber schon mal recht komplex werden, ausserdem läuft es eigentlich dem RAD- bzw. WYSIWYG-Gedanken der Oberflächenentwicklung im BCB zuwider.
Deshalb empfiehlt es sich ggf., die Controls wie gewohnt zur Entwurfszeit von Hand anzuordnen und dann beim Programmstart in ein entsprechendes Array einzulesen. Den Ansatz dazu findest du in den FAQ-Beiträgen "Zugriff, aber nicht durch Namen" und "dynamische Arrays" im Abschnitt "Komponenten benutzen" (das bereits erwähnte 'usw').