Zum Inhalt springen

Eigene Events


Empfohlene Beiträge

Geschrieben

Hallo.

Ich möchte gerne Wissen wie man ein eigenes Event erstellt. Das Event soll dann aufgerufen werden, wenn ich eine Methode aufruf:


public event EventHandler<EventArgs> Onclick;


public void RaiseEvent()

{

      Onclick.Invoke(this, new EventArgs());

}

Den Codeausschnitt habe ich so aus der MSDN.

Ich weiss nicht ob das in Zukunft Klug ist, aber jetzt ist es In Ordnung, dass ich eine Methode verwende, um das Event zu feuern, weil es sich hierbei um Buttons , Labels, etc. Handelt. In deren Onclick Eventhandler schreibe ich meine Methode rein, so dass mein eigenes Event gefeuert wird.

In Zukunft würde ich einen Thread Starten, um z.b. ein Event zu feuern, wenn eine Variable verändert wurde. Aber dass ist eine ganz andere Baustelle.

Hat jemand eine Idee, wie das aussehen muss?

Gruß

Geschrieben

Ein eigenes Event läuft wie folgt ab (bitte korrigieren wenn ich was falsches sag)

1. Delegate definieren

2. Event definieren

3. Event auslösen

4. Event abonieren.

Das sieht im Code in etwa so aus


    class Class1

    {

        public Class1(int myValue)

        {

            this.MyValue = myValue;

        }


        public delegate void MyValueChanged();

        public event MyValueChanged OnMyValueChanged;


        public int MyValue

        {

            get { return myValue; }

            set

            {

                if (value != myValue) 

                {

                    if (OnMyValueChanged != null)//prüfen ob event aboniert wurde

                    {

                        OnMyValueChanged();   //event auslösen

                    }

                    myValue = value;


                }

            }

        }

        private int myValue;


    }

Etz kannst du wenn du dir ein Objekt von der Klasse "Class1" anlegst das event "OnMyValueChanged" abonieren. Sieht wie folgt aus:

..

Class1 cl1 = new Class1(5);

cl1.OnMyValueChanged += new Class1.MyValueChanged(cl1_OnMyValueChanged);

..


        void cl1_OnMyValueChanged()

        {

            //Hier steht das was passieren soll, wenn das event ausgelöst wird

        }


Ich hoffe das ich dir helfen konnte.

Ich hoffe auch, dass das alles so stimmt. Hab auch erst vor kurzem mir mal die events angeschaut... :old

Geschrieben
Ein eigenes Event läuft wie folgt ab (bitte korrigieren wenn ich was falsches sag)

1. Delegate definieren

2. Event definieren

3. Event auslösen

4. Event abonieren.

*korrigier* Erst anmelden, dann auslösen, sonst bringts nicht.


cl1.OnMyValueChanged += new Class1.MyValueChanged(cl1_OnMyValueChanged);

cl1.OnMyValueChanged += cl1_OnMyValueChanged;

ist kürzer... :floet:

(... und für späteres Abhängen auch vorteilhafter.)

Geschrieben (bearbeitet)

Dann ist es auch gute Praxis in der Klasse nicht direkt das Event zu Feuern, sondern eine protected virtual Methode zu erstellen in der dann nicht anderes gemacht wird als das Event auszulösen.

Damit kannst du in abgeleiteten Klassen vor dem Feuern des Events noch andere Dinge einschieben oder die Methode überschreiben um das Event gar nicht mehr auszulösen.

Diese Variante ist Thread-Safe:

protected virtual OnMyEvent(MyEventArgs e)

{

	EventHandler<MyEventArgs> handler = MyEvent;

	if (handler != null)

	{

		MyEvent(this, e );

	}

}

In dem setter aus dem vorherigen Beispiel könnte man also direkt OnMyEvent( e ) aufrufen und so die null Prüfung sparen, wenn man mehr als einen Aufruf des Events hat spart man Code.

Bearbeitet von Argbeil

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...