Kommunikation zwischen Forms (Delegate + Event ?)



  • und weils im ganzen Netz (so hab ich den Eindruck) nur C# Code zu dem Problem gibt,

    Ja huiiii, der wäre ja dann extrem schwer zu portieren.
    Simon

    Edit: Lies mal Grundlagen zum Thema "Events mit .NET" ...



  • Ja huiiii, der wäre ja dann extrem schwer zu portieren.
    Simon

    Kann ja sein, dass es für dich Profi unheimlich leicht ist. Machen wir doch einfach ein Forum "C-Alles" - reicht ja dann.

    Edit: Lies mal Grundlagen zum Thema "Events mit .NET" ...

    Und wie glaubst du hab ich den obigen Code hinbekommen? Geraten ??? Bestimmt nicht. Delegate und Events sind nicht gerade die einfachste Syntax - und obwohl der Code funzt, versteh ich die Struktur immer noch nicht zu 100% - und darum gings in diesem Post.

    Ganz ehrlich, ich versteh Kommentare wie deinen nicht. Aber vielleicht fühlst dich dann toll dabei. 🙄



  • Konnte gar nicht klappen. Form2 wird schließlich noch gar nicht angezeigt

    Wie äussert sich das Fehlverhalten (Compiler, Laufzeit, ...)?

    Beim feuern des Events ( EVT();) brauchts noch einen Check:

    private: System::Void Form21_FormClosing(System::Object^  sender, System::Windows::Forms::FormClosingEventArgs^  e)
             {
                 if (nullptr != EVT)
                 {
                    EVT();
                 }
             }
    


  • In C++/CLI nicht 😉



  • Hallo Theta,

    Compiler zeigte gar nichts an und lief durch. Während das Programm lief wurde die Methode 'OK' nicht ausgeführt, gab aber keinen Absturz. Ist auch logisch: Wenn Form2 nicht offen ist, kann sie auch nicht geschlossen werden und dann feuert sie auch kein Ereignis.

    Danke für den Tip mit dem Check. 👍



  • Danke für den Tip mit dem Check

    Welcher offenbar falsch ist... naja, Schaden tuts nicht.



  • public delegate void MyEventHandler();
    
    // in ref class Form2
    public: event MyEventHandler^ MyEvent;
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 MyEvent();
    		 }
    
    // in ref class Form1
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 Form2 form2;
    			 form2.MyEvent += gcnew MyEventHandler(this, &Form1::OnMyEvent);
    			 form2.ShowDialog();
    		 }
    
    		 void OnMyEvent()
    		 {
    		 }
    

    Simon

    Edit: Funktioniert auch mit dem FormClosing Event.



  • Nur: Warum so kompliziert! Man braucht keinen Event um mitzubekommen, dass der Dialog geschlossen wurde... er ist geschlossen, wenn die ShowDialog-Methode zurückkehrt...



  • Jochen Kalmbach schrieb:

    Nur: Warum so kompliziert! Man braucht keinen Event um mitzubekommen, dass der Dialog geschlossen wurde... er ist geschlossen, wenn die ShowDialog-Methode zurückkehrt...

    Wenn ich nun aber statt ShowDialog() die Methode Show() benutze, bspw. für ein Drag&Drop zwischen den Forms, dann läuft der Code leider durch und bekommt nichts zurück.
    Ich denke mit den Events bin ich da variabler oder?



  • Ja, wenn das Wörtchen wenn nicht wäre....

    Es ist sehr ungewöhnlich dies zu machen, wann man ShowDialog verwendet...


Anmelden zum Antworten