Fomular Komponenten
-
Guten naben,
ich habe ein kleines problem.
In moment aber arbeite ich mit Borland c++ und habe die tolle Funktion Components gefunden.
Die finde ich sehr hilfreich, da ich in moment mit Datenbank arbeite.Zu begin hol ich mir erst einmal mit
AnsiString Test[100]; for(int x = 0;x <i_count ;x++) Test[x] = frm_user->Components[x]->Name
alle namen von den Steuerelementen. So jetzt habe ich eine Datenbank jetzt frage ich ab ob das Steuerelement vorkommt und wie die Überschrift ist.
jetzt hol ich mir die Überschrift aus der Datenbank und möchte die jetzt in die Components setzen mit
Aber es gibt keine
frm_user->Components[x]->Caption?!weiß jemand wie man das macht???
Danke im vorraus
-
Falsches Forum...
Die wenigsten Komponenten haben eine Caption. Was ist eine Caption bei einer TreeView, einem Edit oder einer Combobox? Du brauchst vielleicht ein dazugehöriges Label. Ich denke, du solltest dein Konzept nochmal überdenken
-
In welchen Teilbereich gehört das den?
Ja also ich habe ein Programm was 2 Sprachen können soll, Englisch und Deutsch.
In der Datenbank stehen dann die unterschiedliche Texte drinnen.
Je nachdem welche Sprache ausgewählt wurde, soll das Steuerelement z.B. ein label seine Caption ändern.
Ich habe veruscht einen einfacheren Weg zu finden ohne
if
else
else
elsezu machen, da nicht alle Steuerelement die Caption geändert werden muss oder besitzen.
Und bei Components bekam ich zumindestens alle namen der vorhanden steuerelemnente, das hätte mir viel erspart.
Gibt es den ne andere Lösung?!
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum VCL (C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
Components gibt ein Objekt vom Typ TCompoment* zurück und dieser Type hat die Eigenschaft Caption nicht. Die gibt es erst ab TControl (erbt von TComponent). Du könntest als dein Object versuchsweise in TControl casten und wenn es klappt hast du Zugriff auf die Caption.
Hier ein Beispiel:for(int x = 0;x <frm_user->ComponentCount;x++) { // versucht nach TControl* zu casten TControl* control = dynamic_cast<TControl*>(frm_user->Components[x]); // wenn deine Komponente nicht von TControl abgeleitet ist, ist control 0 if( control != 0) AnsiString caption = control->Caption; }
Das ist aber keine wirklich schöne Lösung. Man sollte derartige Casts eigentlich vermeiden.
Warum machst du das überhaupt. Evtl. gibt es eine ganz andere (bessere) Lösung für dein Problem.
-
Danke
mit dynamic_cast hat es jetzt funktioniert, zwar nicht mit Components aber dafür mit TLabel und TEdit
-
Was genau hast du da gemacht? Kannst du bitte den Code zeigen?
-
for(int x = 0; x < i_count; x++) { set_languageName(frm_user->Components[x]->Name, frm_user->Name); TLabel *component_lbl = dynamic_cast<TLabel*>(FindComponent(frm_user->Components[x]->Name)); TBitBtn *component_bbtn = dynamic_cast<TBitBtn*>(FindComponent(frm_user->Components[x]->Name)); if(component_lbl) component_lbl->Caption = get_languageName(0); else if(component_bbtn) component_bbtn->Caption = get_languageName(0); }
So habe ich das jetzt gelöst, da wenn dynamic_cast kein label findet bei *component_lbl null zurück gibt und so kann ich einfach abfragen ob die einen Wert haben oder nicht :), hat bis jetzt auch auf allen Fomularen funktioniert :).
Jetzt kann ich mein Programm für die Schule 2 Sprachig machen ohne eine lange if ... else if - schleife zu machen
-
Hallo,
aus Performance4-Gründen solltest du FindComponent nur genau 1 mal pro Schleife ausführen und auch die 'dynamic_cast' jeweils geschachtelt nacheinander.