Bei Änderung von Variablenwerten einen Event auslösen

Hier erfahren Sie, wie Sie ein Ereignis auslösen können, wenn eine einfache Variable z.B. vom Typ Integer oder String, einen anderen Wert erhält.

Für Objekte im .NET können Sie bei der Deklaration das Attribut „withEvents“ mitgeben, dann haben Sie alle Ereignisse (Events) des Objekts zur Verfügung und können das mitnutzen:

private withEvents myItem as myControl

Alle Events, die dann in myControl mit public deklariert sind (und die ererbten) stehen Ihnen damit zur Nutzung bereit.
Anders sieht es bei einfachen Variablen aus.

private withEvents myInteger as Integer

wird scheitern, da „Integer“ in diesem Sinne keine Events kennt. Ein kleiner Trick kann Abhilfe schaffen.
Definieren Sie einen eigenen Event und lösen Sie ihn durch Ummanteln der Variable in einem Property aus!

Zunächst die Eventdeklaration:

Public Event MyVariableIntegerChanged

Deklarieren Sie die Property:

Property ThisInteger as Integer
Get
  Return myInteger
End Get
Set (ByVal value as Integer)
 myInteger = value
 RaiseEvent MyVariableIntegerChanged
End Set

Jetzt achten Sie darauf, die Variable nicht direkt sondern über das Property zu ändern, schon haben Sie das gewünschte Ergebnis:

Public Sub New()
    ThisInteger = 1 'belegt den Wert der Variablen myInteger mit 1 und löst den Event MyVariableIntegerChanged aus
End Sub

Das ganze in einer Klasse:

Public Class VariablenEventTest
 Dim myInteger as Integer
Public Event MyVariableIntegerChanged
Property ThisInteger as Integer
Get
  Return myInteger
End Get
Set (ByVal value as Integer)
 myInteger = value
 RaiseEvent MyVariableIntegerChanged
End Set
Public Sub New()
    ThisInteger = 1 'belegt den Wert der Variablen myInteger mit 1 und löst den Event MyVariableIntegerChanged aus
End Sub
End Class

Ich kann nun auf den Event wie gewohnt reagieren, z.B. innerhalb der Klasse

Private Sub MyHandle() handles MyVariableIntegerChanged
 Messagebox.Show("Die Variable myInteger wurde geändert")
End Sub

Da ich hier den Event mit Public deklariert habe, steht er auch andernorts bei der Nutzung der Klasse zur Verfügung:

Public Class Irgendwo
Private withEvents meineKlasse as VariablenEventTest
Public Sub New()
meineKlasse = New VariablenEventTest()
End Sub

Private Sub MyHandle() handles meineKlasse.MyVariableIntegerChanged
 Messagebox.Show("Die Variable myInteger wurde geändert")
End Sub
End Class
%d Bloggern gefällt das: