VB.NET-Tipp 0127: Ereignisse implementieren
von Spatzenkanonier
Beschreibung
Die im .NET Framework übliche Konvention zur Implementierung von Ereignissen sieht drei Bestandteile vor:
1.) eine von EventArgs erbende Klasse "MyXYEventArgs"
2.) die Event-Deklaration "MyXY"
3.) eine Overridable Sub "OnMyXY"(e As MyEventArgs), die das Ereignis auslöst
Die Overridable Sub "OnMyXY" ist erforderlich, um gegebenenfalls erbenden Klassen die Möglichkeit zu geben, das Ereignis auszulösen, da die RaiseEvent-Anweisung keinen Zugriff auf Ereignisse der Basisklasse hat.
Die Beispielklasse "CountDown" stellt zwei Ereignisse zur Verfügung:
1.) Das Ereignis Tick, welches ein benutzerdefiniertes EventArgs transportiert
2.) Das Ereignis Finished, ohne Datentransport
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Compact Framework 1.0, .NET Compact Framework 2.0, .NET Framework 4 | .NET-Version(en): Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008, Visual Basic 2010 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2005 ' Option Strict: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Web.Services ' - System.Windows.Forms ' - System.Xml ' ' Imports: ' - Microsoft.VisualBasic ' - Microsoft.VisualBasic.ControlChars ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ############################### CountDown.vb ################################# ' ############################################################################## ''' <remarks> ''' Beachten Sie auch die zusammengehörige Event-Benamung: ''' Tick, TickEventArgs, OnTick ''' </remarks> Public Class CountDown ' Benutzerdefinierte Events: #Region "Event Tick" ''' <summary> ''' Benutzerdefiniertes EventArgs, transportiert den aktuellen ''' Stand des CountDowns ''' </summary> Public Class TickEventArgs : Inherits EventArgs Public ReadOnly Counter As Integer Public Sub New(ByVal Counter As Integer) Me.Counter = Counter End Sub End Class 'TickEventArgs ' Tick verwendet einen generischen Eventhandler für TickEventArgs Public Event Tick As EventHandler(Of TickEventArgs) Protected Overridable Sub OnTick(ByVal e As TickEventArgs) RaiseEvent Tick(Me, e) End Sub #End Region #Region "Event Finished" ' Finished verwendet den Standard-Eventhandler für EventArgs.Empty Public Event Finished As EventHandler Protected Overridable Sub OnFinished() RaiseEvent Finished(Me, EventArgs.Empty) End Sub #End Region Private WithEvents _Timer As Timer Private _Counter As Integer Public Sub Start(ByVal InitValue As Integer) _Timer = New Timer _Timer.Interval = 1000 _Timer.Start() _Counter = InitValue OnTick(New TickEventArgs(_Counter)) End Sub Private Sub _Timer_Tick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles _Timer.Tick _Counter -= 1 OnTick(New TickEventArgs(_Counter)) If _Counter = 0 Then _Timer.Dispose() OnFinished() End If End Sub End Class ' ############################################################################## ' ############################## frmCountDown.vb ############################### ' ############################################################################## Public Class frmCountDown Private WithEvents _CountDown As New CountDown Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click _CountDown.Start(10) End Sub Private Sub _CountDown_Tick( _ ByVal sender As Object, _ ByVal e As CountDown.TickEventArgs) Handles _CountDown.Tick Me.Label1.Text = e.Counter.ToString End Sub Private Sub _CountDown_Finished(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles _CountDown.Finished MsgBox("Los!") End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.