| 

.NET C# Java Javascript Exception

5
Was genau ist der Unterschied zwischen Click und OnClick? Habe beides schon gesehen, aber was nehme ich wann?
22.05.2011
Insomnia 51 1 3
2 Antworten
9
Click ist das Event, OnClick die Methode, die das Event auslöst.

Eigentlich müsste das Event ganz korrekt Clicking oder Clicked heißen, je nachdem, ob es ein Pre- oder ein Postevent ist. Bei einem Fenster sieht man das zum Beispiel ganz schön:

Closing wird ausgelöst, wenn der Benutzer das Fenster schließt, es aber noch zu sehen ist. Hier kann man sich reinhängen, um zum Beispiel zu fragen, ob er das Fenster wirklich schließen will. Insofern ist Closing ein Preevent. Ist es dann tatsächlich zu, wird Closed ausgelöst.

Da man beim Auslösen eines Events ja immer prüfen muss (oder zumindest sollte), ob es ungleich null ist, lagert man den Event-auslösenden Code in eine eigene Methode aus - das ist dann die OnClicking oder OnClicked.

Wichtig dabei ist, dass sie protected virtual void als Signatur hat - damit auch abgeleitete Klassen das Event auslösen können (was mit dem Event direkt nicht geht), oder die Event-Auslösung gar verändern können, indem sie die On-Methode überschreiben.

Im Gegensatz zu "früher" ist die On-Methode also *NICHT* die Methode, die das Event behandelt ...

Klarer?
22.05.2011
Golo Roden 2,7k 3 9
3
Als Ergänzung zu Golos Antwort sei noch gesagt:

Wenn Du eine Klasse ableitest und auf das Ereignis der Basisklasse reagieren willst (z.B. auf Form.Closing), dann überschreibst Du die On...-Methode (z.B. Form.OnClosing). Das hat einen großen Vorteil:

Du weist genau, dass noch niemand dieses Ereignis gesehen und verarbeitet hat. Erst der Aufruf der Basis-On...-Methode löst das Ereignis auch für alle registrierten Handler aus. Würdest du einen Handler auf das Ereginis registrieren, kannst Du nie sicher sein, ob bereits andere Handler vor Deinem aufgerufen wurden oder ob Du sogar der Letzte Adressat bist. In der On...-Methode hast Du die Freiheit, selbst zu entscheiden, wann die registrierten Handler aufgerufen werden.

In Klassen, die nicht von der entsprechenden Klasse abgeleitet sind, bleibt Dir nichts anderes übrig, als einen Handler für das Ereignis selbst zu registrieren.

Microsoft empfiehlt auch in abgeleiteten Klassen immer die On...-Methode zu überschreiben. Siehe zB How to: Raise Base Class Events in Derived Classes
23.05.2011
Andreas Ganzer 1,4k 1 8
gfoidl 9,4k 3 5

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH