Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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ß

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

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.)

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.