Formular-Controls (Buttons) dynamisch ansprechen



  • Ich habe ein Problem, dass offensichtlich sonst keiner hat (Eindruck nach einer Woche googeln). 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 seperat unter 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.)
    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.

    ****************************************************************************
    //Hier ist die Funktion für die Manipulation der einzelnen Buttons

    void set_button(int x){
    String^ mystring;
    mystring = "button" + x; //bis hierher gehts

    //button1->text = "OFF"; // das funktioniert

    mystring->text = "OFF"; //Das funktioniert eben nicht, hier fehlt der Verweis auf das Objekt "button1" Hier brauche ich Hilfe
    }

    // Hier nun die Click-Funktionen der Button (Beispielhaft nur zwei, statt acht)
    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);
    }
    ****************************************************************************

    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.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Meines Wissens gibt es eine eine Eigenschaft der Form-Klasse, worin alle Steuerelemente, die es im Programm gibt, aufgelistet sind. Aus dieser Eigenschaft kannst den entsprechenden Button abrufen und bearbeiten.

    Siehe auch:
    http://msdn.microsoft.com/de-de/library/system.windows.forms.control.controls(VS.80).aspx



  • Das ist mir bekannt. Aber damit geht es auch nicht, da ich damit zwar Zugriff auf die Eigenschaften eines Controls nehmen kann, aber meinen Button hab ich damit immer noch nicht von der Funktion aus angesprochen.

    Trotzdem danke.



  • Dann mach doch ein Array von 8 Button^ zeiger als Member des Forms, initialisiere das Array im Konstruktor des Forms mit Deinen 8 Buttons und spreche dann diese über das Array mit seinen Indicies an.


Anmelden zum Antworten