Eigene Events erstellen



  • Hallo,
    ich hoffe ihr könnt mir helfen ein eigenes Event zu erstellen, habe das in den Beispielen nicht so richtig verstanden, wie ich das umsetzen soll, deshalb hier mal ein Fall, der 100% auf mich passt. Ich habe mir irgendwann einmal das Spiel 2048 geschrieben. Hier habe ich eine Klasse Field mit folgenden Komponenten:

    class Field
    {
        private int Row      = -1;
        private int Column   = -1;
        private int FieldNbr = -1;
        private int Value    = 0;
    
        private bool CalculatedDuringActMove = false;
    
        private TextBox FieldBox = new TextBox();
    

    Nun möchte ich als Beispiel ein Event, wenn der Wert in Value = 128 wird, dass dann ein Event ausgelöst wird. Es wäre echt cool, wenn ihr mir da auf die Sprünge helfen könntet.





  • @HerrRatlose sagte in Eigene Events erstellen:

    Nun möchte ich als Beispiel ein Event, wenn der Wert in Value = 128 wird, dass dann ein Event ausgelöst wird. Es wäre echt cool, wenn ihr mir da auf die Sprünge helfen könntet.

    Dazu musst du dich als erstes mal beim TextChanged Event der TextBox anmelden. Darin kannst du dann prüfen ob der Text jetzt 128 ist. Und dann entweder direkt in deinem TextChanged Event-Handler das machen was du machen willst. Oder dort halt einen neuen Event "Text changed to 128" feuern. Wie eigene Events feuern geht ist wieder ein anderes Thema, aber ich würde sagen alles schön der Reihe nach.

    Wobei ...

    Ich habe mir irgendwann einmal das Spiel 2048 geschrieben. Hier habe ich eine Klasse Field mit folgenden Komponenten:

    In dem Fall kontrollierst du den Text in den Feldern doch sowieso von aussen. Wozu brauchst du dann einen Event? Du kannst das was du als Reaktion auf die Text-Änderung machen möchtest doch einfach dort machen wo du auch den Text setzt.



  • @hustbaer Ja, das funktioniert ja auch alles, wollte jetzt nur mal mit einem Event herumprobieren um zu verstehen was das überhaupt macht. Es geht ja eh schon, dass Werteabhängig, die Farbe ändert und so, wollte halt eben ein Event erzeugen, wo irgend etwas anderes passiert, um das Handling der Events zu verstehen. Den Unterschied erkennen, wenn ich in meiner Klasse erkenne, der Wert ist >"x", dann event.
    Ich verstehe halt nicht, wenn ich eine Klasse "Wert" habe, wo ich abfragen kann, wenn der Wert > X ist, dann MessageBox, oder halt event, wo ist denn da der Unterschied???



  • Bei einem Ereignis (event) geht es um Trennung der Zuständigkeiten. Nach der bei einem Projekt üblichen Drei-Schichten-Architektur sollten z.B. in der Business-/Logik-Schicht keine UI-Funktionalitäten stattfinden (also z.B. keine MessageBox aufgerufen werden) - stattdessen wird dann ein Ereignis ausgelöst, welches dann von der höheren Schicht abonniert wird (welches dann z.B. die Ausgabe durchführt).

    Weitere Infos s.a. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse) .



  • @HerrRatlose sagte in Eigene Events erstellen:

    @hustbaer Ja, das funktioniert ja auch alles, wollte jetzt nur mal mit einem Event herumprobieren um zu verstehen was das überhaupt macht. Es geht ja eh schon, dass Werteabhängig, die Farbe ändert und so,

    OK, war mir nicht sicher und wollte es sicherheitshalber erwähnen.

    wollte halt eben ein Event erzeugen, wo irgend etwas anderes passiert, um das Handling der Events zu verstehen. Den Unterschied erkennen, wenn ich in meiner Klasse erkenne, der Wert ist >"x", dann event.
    Ich verstehe halt nicht, wenn ich eine Klasse "Wert" habe, wo ich abfragen kann, wenn der Wert > X ist, dann MessageBox, oder halt event, wo ist denn da der Unterschied???

    Das kommt jetzt auf die Klasse an. Bei Forms haben alle Controls Events wenn sich Werte ändern. An diese kannst du dich dranhängen.
    Dazu kannst du z.B. einfach im Konstruktor schreiben

        FieldBox.TextChanged += MeinTextChangedHandler;
    

    MeinTextChangedHandler musst dazu natürlich die passende Signatur haben. In habwegs aktuellen Visual Studio Versionen geht das aber sehr einfach. Du Schreibst einfach FieldBox.TextChanged += im Konstruktor rein und drückst dann die Tab Taste. Dann fügt Visual Studio einen automatisch generierten Vorschlag ein. Diesen kannst du mit der Eingabetaste akzeptieren.



  • @hustbaer Vielen Dank für die bisherigen Antworten. Ich suche nach einem Beispiel, bei dem ein eigenes Event für die Variable value erzeugt wird.
    Losgelöst von Textboxen oder so. Wirklich ein eigenes Event für value, auch wenn das hier nicht sinnvoll erscheint. Mir würde dieses eigene event helfen, nnur um zu sehen, wie ich so etwas auslösen kann...

    Danke für eure Geduld





  • @HerrRatlose sagte in Eigene Events erstellen:

    Ich suche nach einem Beispiel

    Alter, was hab' ich dir denn in dem ersten Beitrag gepostet??



  • @HerrRatlose sagte in Eigene Events erstellen:

    Wirklich ein eigenes Event für value, auch wenn das hier nicht sinnvoll erscheint. Mir würde dieses eigene event helfen, nnur um zu sehen, wie ich so etwas auslösen kann...

    Du definierst einen Delegate-Typ, machst ein Event Member mit diesem Typ und feuerst dann halt den Event. Siehe https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/event



  • Eigene Delegate-Typen braucht man i.d.R. nicht mehr definieren, sondern kann die Generics Action<...>, Func<R, ...> bzw. EventHandler<EventArgs> benutzen.


Log in to reply