Feststellen welches Steuerelement ein Ereignis ausgelöst hat



  • Hallo, ich habe mehreren Checkboxen das selbe OnClick-Ereignis zugeordnet. Wie kann ich nun feststellen welche Checkbox das Ereignis ausgelöst hat. Ich heane den ganzen Tag versucht über das Sender-Object (Sender = Nomen est Omen) eine Lösung zu finden, krieg es aber einfach nicht hin. Ich habe auch gerade den Beitrag Globale Eventhandler gelesen, ist das evtl. die Lösung (evtl. sogar die einzige)?
    Gruss Walter



  • Warum bekommst Du es mit den "Object^ sender" nicht hin!?

    void CheckBox_Event(Object ^sender, EventArgs ^e)
    {
      CheckBox ^cb = dynamic_cast<CheckBox^>(c);
      if (cb != nullptr) 
      {
        // Mach was immer Du willst...
      }
    }
    


  • Hi!

    Interessantes Problem! Ich habs mal nachgestellt.
    Woher nimmst du aber die Variable "c"?
    Ist das ein Tipfehler?

    Wenn ich statt "c" "e" oder "sender" eingebe wird der Wert nicht definiert.

    void Form1::comboBox1_TextChanged(System::Object *  sender, System::EventArgs *  e)
    {
    /*CheckBox * cb_c = dynamic_cast<CheckBox*>(c);        // c nicht deklariert
    	String * Debug_c = cb->Name->ToString();*/
    
    	CheckBox * cb_sender = dynamic_cast<CheckBox*>(sender);    // cb_sender = <undefinierter Wert>
    	//String * Debug_sender = cb->Name->ToString();
    
    	CheckBox * cb_e = dynamic_cast<CheckBox*>(e);    // cb_e = <undefinierter Wert>
    	//String * Debug_e = cb->Name->ToString();
    
    }
    

    Was ist das für ein mysteriöses "c"?
    Falls nen Unterschied macht, ich arbeite mit Microsoft Visual Studio .NET 2003
    gruß!

    pAT



  • Das "c" ist ein Copy-n-Paste error und sollte natürlich "sender" heissen...

    Für VS2003 hast Du es schon korrekt umgesetzt...



  • Aso, also doch keine Hexerei ^^

    Hübsche Sache, wieder was gelernt. Vielen Dank!

    (... hoffentlich merkt keiner, dass ich das checkBox-event versehentlich in eine comboBox-funktion gepackt hab...)



  • Delegates sind invariant, du kannst also von völlig verschiedenen Controls auf verschiedene Events horchen, solange die Signaturen kompatibel sind. EventHandler<EventArgs> sind immer kompatibel. Das heißt, du kannst jede Methode mit der Signatur MyEventHandler(object, EventArgs) für jedes Event verwenden.



  • Jochen, warum ich das nicht hinbekommen habe. Ganz einfach, weil ich noch Anfänger bin. Ich habe versucht mit den Dingen weiterzukommen die mir Intellisense anbietet oder die Hilfe, da bin ich eben nicht weitergekommen, weil ich eben noch nicht alles so checke. Danke es klappt nämlich einwandfrei und hat mir wieder ein klitzekleines Bisschen den Horizont in Sachen C++/Cli erweitert.
    Gruss Walter



  • Das war von mir nicht böse gemeint.... ich mag nur nicht solche Aussagen wie "ich bekomme es nicht hin" oder auch nur ein bischen Code zu zeigen, was man gemacht hat 🤡



  • Jochen, habe ich auch nicht so aufgefasst. Nur wenn Du schon fragst, ist es eine Frage des Anstands auch zu antworten. So long, bis zu meiner nächsten Anfängerfrage und allen die diesen Beitrag lesen ein Frohes Fest und ein gutes Neues Jahr.



  • Walter_vdV schrieb:

    Jochen, habe ich auch nicht so aufgefasst. Nur wenn Du schon fragst, ist es eine Frage des Anstands auch zu antworten.

    Wieso, ich hab doch geantwortet oder?



  • Er meinte das es Anstand war, das er auf Deine Frage geantwortet hat.
    (So viel Anstand ist halt unüblich 😃 )

    Btw.: Objekte und Vererbung (sowie dynamic_cast) gibts im Grundlagenbuch =o)



  • Knuddelbaer, genau so habe ich es gemeint!!! Apropo welches Grundlagenbuch???


Anmelden zum Antworten