Im Interface auf Ereignis reagieren

28/10/2008 - 19:20 von Georg Matejka | Report spam
Hallo,
wie kann ich in einer Implementierung ein Ereignis auslösen? Oder: Wie
findet das in der implementierenden Klasse ausgelöste Ereignis in die
Schnittstelle?
Beispiel:

Code aus der Implementierenden Klasse (cls_MeineKlasse)
...
'Deklaration
Implements I_MeinInterface
Public Event EinEvent()
...
'Ereignis auslösen
If a then RaiseEvent EinEvent()
...

Code aus -zB- dem aufrufenden Formular
...
'Deklaration
Private WithEvents mobjInterface As I_MeinInterface
...
'Objekt (beim Öffnen des Formulares) laden
Set mobjInterface = New cls_MeineKlasse
...
'Und jetzt sollte das Ereignis zu Stande kommen:
Private Sub mobjInterface_EinEvent()
End Sub

Hmmmm... - Idee? -> Danke!

Georg
 

Lesen sie die antworten

#1 Thomas Möller
28/10/2008 - 19:58 | Warnen spam
Hallo Georg,

Georg Matejka schrieb:
wie kann ich in einer Implementierung ein Ereignis auslösen? Oder: Wie
findet das in der implementierenden Klasse ausgelöste Ereignis in die
Schnittstelle?



ich möchte vorab kurz noch einmal die Begriffe klàren:

Ein Interface ist ein Klassenmodul, in dem nur die zu implementierenden
Prozeduren eingefügt werden. Dazu werden jeweils nur die Aufrufe der
Prozeduren deklariert. Der konkrete Code steht dann spàter in der
Klasse, die dieses Interface implementiert.

Eine Klasse kann ein Interface implementieren. Dazu verwendest Du den
Befehl "Implements" gefolgt von dem Namen des Interfaces.
In der Klasse müssen alle im Interface definierten Prozeduren
implementiert werden. Hier wird dann der konkrete Code implementiert.

Du kannst auf das Ereignis einer Klasse in einem Modul reagieren. Dazu
deklarierst Du eine Variable vom Typ der Klasse mit dem Schlüsselwort
"WithEvents" und fügst eine "Ereignis-Senke" ein, z.B.

Private Sub DeineKlasse_DeinEvent ()

In dieser Prozedur reagierst Du auf das von der Klasse ausgelöste Ereignis.


Beispiel:

Code aus der Implementierenden Klasse (cls_MeineKlasse)
...
'Deklaration
Implements I_MeinInterface
Public Event EinEvent()
...
'Ereignis auslösen
If a then RaiseEvent EinEvent()
...



so weit so gut


Code aus -zB- dem aufrufenden Formular
...
'Deklaration
Private WithEvents mobjInterface As I_MeinInterface



IMHO solltest Du hier ein Objekt vom Typ Deiner Klasse deklarieren:

Private WithEvents mobjInterface As cls_MeineKlasse

Wahrscheinlich wàre es auch besser, den Namen der Objektvariablen
anzupassen:

Private WithEvents mobjMeineKlasse As cls_MeineKlasse

...
'Objekt (beim Öffnen des Formulares) laden
Set mobjInterface = New cls_MeineKlasse
...
'Und jetzt sollte das Ereignis zu Stande kommen:
Private Sub mobjInterface_EinEvent()
End Sub



In dieser Prozedur reagierst Du auf das von der Klasse ausgelöste
Ereignis. Hier fügst Du den Code ein, der ausgeführt werden soll, wenn
das Ereignis ausgelöst wird.


CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen