Frage zu Labels
-
Hallo,
ich hab folgenden Code:
if (Typ==2) { Label2->Caption=Z; } else if (Typ==3) { Label3->Caption=Z; } else if (Typ==4) { Label4->Caption=Z; }
usw. das geht bis 40.
(Z ist ein String)!
da das aber viel zu lang ist möchte ich gerne wissen, ob es einen kürzeren Weg gäbe, um das obrige zu erreichen (also eine Codekürzung).
Ich hoffe ihr könnt mir helfen.
Lg
-
schau mal bitte in den FAQ unter Komponenten "Dynamische Arrays von Komponenten oder Objekten" und "Zugriff, aber nicht durch Namen"
auch die Suchfunktion liefert zu diesem Thema ausreichend viele Antworten
-
Hallo,
danke schonmal für deine Antwort.
ich hab' mir das mal durchgelesen und auh noch gesucht, aber dort ist ja nur die Rede von allen Labels oder von einem Label.Ich möchte ja aber haben, dass wenn Typ==2 ist, dass dann nur in Label2 Z erscheint. und nur bei Typ==3, nur Label3 gleich Z.
Ich hab' schomal versucht das Problem mit
Label + (Typ)->Caption=Z;
zu lösen.
Das hat allerdings nicht geklappt.
Lg
-
Die Umformung in eine switch-Anweisung würde den Code schon ein wenig verkürzen und optimieren.
switch(Typ) { case 2; Label2->Caption=Z; break; case 3: Label3->Caption=Z; break; case 4: Label4->Caption=Z; break; ... }
Wenn es zu verschiedenen Typ-Werten gleiche Label gibt, kann man die zusammenfassen.
switch(Typ) { case 2; case 3: case 4: Label4->Caption=Z; break; ... }
-
Hi,
switch ist hier auch nicht unbedingt angesagt. Typ und Komponentenname stehen in Zusammenhang.
Wie linnea schrieb, bietet sich der (indizierte)Zugriff auf die Labels über ein dynamisches Array an.
Das gibt eine Schleife mit max. 7 Codezeilen.Danach sollte er suchen; das Forum bietet dazu etliche Beiträge.
mfg
kpeteredit:
Alternativ geht auch folgender Code. Setze ein TEdit und ein Button aufs Formular und teste:void __fastcall TForm1::Button1Click(TObject *Sender) { String Z = "Test"; int Type = StrToInt(Edit1->Text); if (Type >= 1 && Type <= 40) { TLabel *label; label = dynamic_cast<TLabel*>(FindComponent("Label" + IntToStr(Type))); if (label) label->Caption = Z + " " + label->Name; } } //---------------------------------------------------------------------------
mfg
kpeter
-
vielen Dank. es klappt.