Label dynamisch ansprechen



  • Hallo,

    Ich hab hier schon egsucht, aber nicht ads richtige gefunden...
    Ich hab eine Map aus labels, welche den namen map_1_1, map_1_2,...haben.
    Nun möchste ich diese Felder dynamisch ansprechen... Also zwei int-Werte kommen rein: z.B. x = 5, y = 7 worauf hin dann Folgenden befehl ausführen möchte: map_5_7->Text = "Test";

    Wie krieg ich das hin?
    Danke schon mal für eure Hilfe...

    Gruß
    Crusher



  • Wenn du einen entsprechenden String generieren willst, dann geht das so:

    CString string;
    string.Format("map_%d_%d",x,y);
    

    Damit könntest du den Control mittels GetDlgItem() ansprechen.

    Wenn du damit aber direkt auf Instanzen irgendwelcher Klassen zugreifen willst dann benötigst du arrays. In diesem Fall würde sich ein zweidimensionales array anbieten (map[x][y]).



  • Ich habe ein ähnliches Problem, dass offensichtlich keine Lösung kennt. Ich habe mit VC++ Express ein Formular erstellt, welches 8 Buttons beinhaltet, über die ich Digitalausgänge einer Interfacekarte schalte. Soweit so gut. Jeder Button soll abhängig vom Schaltzustand des Ausganges die Beschriftung (ON oder OFF), sowie die Farbe(rot / grün) ändern. Im Moment habe den entspechenden Code für jeden einzelnen Button sepereat ünter seiner Click-Funktion stehen, was natürlich mühseelig ist. Meine Idee nun, eine seperate Funktion dafür zu nutzen, der ich nur ne Zahl (also 1-8) als int-Wert übergebe.)

    ****************************************************************************
    void set_button(int x){
    String^ mystring;
    mystring = "button" + x;
    }

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
    set_button(1);
    }
    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
    set_button(2);
    }
    ****************************************************************************

    Ich habe nun laienhaft daraus eine String-Variable gebastelt, die nun auch folgerichtig "button1" bzw "button2" beinhaltet. Um den Text auf dem button zu ändern schreibe ich ja theoretisch

    button1->text = "z.B. OFF";.

    das funktioniert aber leider nicht mit : mystring->text = ... nicht, da die Methode folgerichtig auf das button-Objekt und nicht auf den String ausgeführt werden kann.
    Also nun....wie bekomme ich über den String (mit Inhalt "button1 od. button2") tatsächlich den entsprechenden Button angesprochen oder ausgewählt, so dass ich den Text und die Farbe entsprechend ändern kann. das mit dem GetDlgItem() hat VC++ nicht gewollt (oder ich habs falsch gemacht).



  • (oder ich habs falsch gemacht)

    Ja, einiges: erstens bist du im falschen Forum (hier steht gross MFC drüber!). Des Weiteren ist es nicht gern gesehen x-mal die gleiche Frage zu posten. Ein Thread reicht.

    Also, für den Fall, dass du mehreren Buttons die gleiche Methode zuordnen willst gibt es in der MFC "ON_COMMAND_RANGE". Dort wird auch die ID des aufrufenden Buttons mitgeliefert, sodass du über diese auf den jeweiligen Button zugreifen kannst.
    Eine andere Möglichkeit wäre mit einem Button-Array zu arbeiten.


Log in to reply