Feldnamen dynamisch Verändern HILFE!



  • Halli hallo alles zusammen.
    Hoffe mit meinem Topic fühlt sich niemand auf die füße getreten und wollte zuerst ma alles sagen. Ich bin schüler der 12ten klasse und stehe kurz vor meiner Abschlussprüfung. Ich absolviere gerade die Fachoberschule in Richtung Informatik. Nun sollen wir in der schule ein projekt schreiben bei dem es zur folgenden problematik kam. und zwar befinden sich 15 label felder auf einem Formular. ich möchte bei jedem klick ein weitere labelfeld ansprechen. das bedeutet ich klicke auf den button und feld 1 wird z.B. lbl1->Caption="asd". beim zweiten klick soll das lbl2 gesetzt werden nur für alle lbl felder eine if abfrage zu schreiben ist hirnrissig aber lbl[counter]->Caption="asd" funktioniert nicht. um nochma mein problem zu verdeutlichen stell ich einfach diese schleife zur visualisierung da. problem ist das gleiche

    for(int i=0;i<5;i++){
    lbl[i]->Caption="qwsde";
    }

    ich bedanke mich für alle antworten und hoffe mir kann jemand helfen.



  • also, wenn "lbl" ein array aus irgendwelchen instanzen sein soll, dann kannst du damit den "->" operator schon mal nicht verwenden, weil du den benötigten zeiger bereits mit operator [] dereferenziert hast.

    du kannst stattdessen operator . oder zeigeraddition verwenden:

    lbl[i].member_variable_called_however=12345678;
    //oder
    (lbl+i)->member_variable_called_however=54672345;
    

    die meisten würden wohl zur ersten lösung tendieren...
    wenn jetzt aber "lbl" ein array aus zeigern, also vom typ "myLabel*" ist, kann ich nichts weiter zu sagen. Mehr code bitte.



  • Hallo

    Ich vermute du benutzt den Borland C++ Builder / Studio.
    Wenn dem so ist dann schau in die FAQ des extra dafür vorgesehenen Builder-Subforums hier. Dort ist im Abschnitt "Komponenten benutzen" ein Thread namens "Dynamische Arrays von Komponenten".

    bis bald
    akari



  • hab ich den sinn der frage absolut voll nicht gecheggt? 🤡 habe ich da etwa totalen müll geschrieben? 😃



  • hehe schon einmal danke für die antworten nur habt ihr glaub ich nocht nicht verstanden auf was ich hinaus will.

    es geht um KEIN array sondern habe ich zwei Edit Felder namens Edit1 und Edit2

    nur ist es mühseelig immer zu schaun ob der counter nun 1 oder 2 ist um dann entsprechnen Edit1 weil counter 1 zu beschriften oder Edit2 weil counter 2 ist.
    nun möchte ich das verallgemeinern in dem ich einfach sage das feld ist nicht Edit+die zahl sondern Edit+counter . also

    Edit+counter->Text="bla";

    das geht schon mal auf gar keinen fall weil er denkt da ist eine addition.

    versuch zwei war folgender. ich deklariere und definiere eine AnsiString variable feld mit feld = "Edit";

    nun weiß ich das counter ein int ist und das net passt also umwandeln und auf die AnsiString Variable drauf addieren also dann so

    feld = feld + StrToInt(counter);
    demnach wäre dann feld = Edit1; wenn ich nun statt Edit1 feld benutzen möchte

    also wie folgt feld->Text="bla"; dann sagt compiler, dass feld kein typ von TForm1 ist. Also kein typ vom Formulartyp. nun nochmal meine frage. Wie schaffe ich es das ich eine variable anstatt des Textfeldnamen benutzen kann.

    ich danke shcon ma für alle antworten ;););)



  • ich verstehs leider immer noch nicht... was macht du da? hast du eigene gui? arbeitest du mit MFC oder der WinAPI?
    Wenn du code zur laufzeit erzeugen willst, als ob das hier irgendeine script sprache wäre: nein, das geht nicht, das ist nicht möglich.
    Dürften wir vielleicht etwas code sehen? dann könnten wir dir auch sagen, wie du das alles am besten zum funktionieren bringst, anstatt darüber zu spekulieren, was du da meinst...



  • Hallo

    suerte schrieb:

    hehe schon einmal danke für die antworten nur habt ihr glaub ich nocht nicht verstanden auf was ich hinaus will.

    es geht um KEIN array sondern habe ich zwei Edit Felder namens Edit1 und Edit2
    ...

    Ich habe dich sehr gut verstanden, das ist eine oft auftretende Frage bei der VCL des Builder.
    So einfach wie du dir das vorstellst kannst du es nicht lösen. Wie der von mir genannte FAQ-Eintrag sagt gibt es zwei verschiedene Lösungen : Mit TForm::FindComponent nach dem zusammengesetzten Controlnamen suchen oder eben zusätzlich einmalig zur Laufzeit ein Array mit Pointern auf Controls erstellen und dieses nutzen.
    Details siehe FAQ.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wieso fragst du nicht einfach Herrn Grüning oder Herrn Kunkel selbst? 😉
    Dazu sind sie doch da...



  • Hi,

    Herr Kunkel, sie hier? ^^
    Die Lösung hat akari ja bereits genannt. Array mit Pointern auf Controls und dann das Array durchzählen lassen.

    mfg
    cb


Anmelden zum Antworten