errox Geschrieben 10. Dezember 2009 Geschrieben 10. Dezember 2009 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ß Zitieren
Guybrush Threepwood Geschrieben 11. Dezember 2009 Geschrieben 11. Dezember 2009 C# Event liefert als 2. google treffer folgendes MSDN Event Tutorial: Events Tutorial (C#) Zitieren
Rekon1602 Geschrieben 11. Dezember 2009 Geschrieben 11. Dezember 2009 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 Zitieren
TDM Geschrieben 11. Dezember 2009 Geschrieben 11. Dezember 2009 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.) Zitieren
Argbeil Geschrieben 11. Dezember 2009 Geschrieben 11. Dezember 2009 (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 11. Dezember 2009 von Argbeil Zitieren
Empfohlene Beiträge
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.