Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0127: Ereignisse implementieren

 von 

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:

Schwierigkeitsgrad 1

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:

Download des Beispielprojektes [11,72 KB]

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