Reihenfolge von Eventhandlern

06/03/2009 - 11:42 von Thomas Schremser | Report spam
Hallo allerseits!

Ich habe eine Klasse der ich eine TextBox zuweise und die dann auf
verschiedene Events dieser TextBox reagiert:

' TextBoxExtender.cls

Private WithEvents mTextBox As TextBox

Public Sub Init(ByVal TextBox As TextBox)
Set mTextBox = TextBox
End Sub

Private Sub mTextBox_Change()
Debug.Print "In der Klasse"
End Sub

Das funktioniert auch problemlos. Nun möchte ich aber in der Form, die die
TextBox enthàlt ebenfalls auf das Change-Ereignis reagieren:

' Form1.frm

Private mTextBoxExtender As TextBoxExtender

Private Sub Form_Load()
Set mTextBoxExtender = New TextBoxExtender
mTextBoxExtender.Init Text1
End Sub

Private Sub Text1_Change()
Debug.Print "In der Form"
End Sub

Wenn ich obigen Test-Code ausführe, erhalte ich als Ausgabe

In der Form
In der Klasse

Meine Frage ist nun, kann ich mich darauf verlassen, daß die Eventhandler in
dieser Reihenfolge aufgerufen werden bzw. kann ich auf diese Reihenfolge
irgendwie Einfluß nehmen?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Harald M. Genauck
06/03/2009 - 16:18 | Warnen spam
Hallo Thomas,

Ich habe eine Klasse der ich eine TextBox zuweise und die dann auf
verschiedene Events dieser TextBox reagiert:

' TextBoxExtender.cls

Private WithEvents mTextBox As TextBox

Public Sub Init(ByVal TextBox As TextBox)
Set mTextBox = TextBox
End Sub

Private Sub mTextBox_Change()
Debug.Print "In der Klasse"
End Sub

Das funktioniert auch problemlos. Nun möchte ich aber in der Form,
die die
TextBox enthàlt ebenfalls auf das Change-Ereignis reagieren:

' Form1.frm

Private mTextBoxExtender As TextBoxExtender

Private Sub Form_Load()
Set mTextBoxExtender = New TextBoxExtender
mTextBoxExtender.Init Text1
End Sub

Private Sub Text1_Change()
Debug.Print "In der Form"
End Sub

Wenn ich obigen Test-Code ausführe, erhalte ich als Ausgabe

In der Form
In der Klasse

Meine Frage ist nun, kann ich mich darauf verlassen, daß die
Eventhandler in
dieser Reihenfolge aufgerufen werden bzw. kann ich auf diese
Reihenfolge
irgendwie Einfluß nehmen?



An sich soll laut Doku die Reihenfolge "offiziell" _nicht_ fest
definiert und vorhersehbar sein.

Aber ich habe nicht erlebt, dass sich die Reihenfolge zufàllig àndern
würde, zumindest nicht, wenn aller beteiligter Code in VB selber
geschrieben ist, egal, ob in der Anwendungs selbst oder in externen
Komponenten (ActiveX-DLL, OCX). Es könnte allenfalls sein, dass sich in
anderen Programmiersprachen bzw. mit anderen Programmiertools
entwickelte COM-Objekte anders verhalten - dazu habe ich aber keine
praktische Erfahrung.

Da sowohl die Instanzierung der Ereignissender als auch der -empfànger
in einem VB-Programm synchron (solange mein Multithreading irgendeiner
Art ins Spiel kommt) synchron und damit deterministisch ablàuft, sollte
die Reihenfolge auch immer dieselbe sein.


Viele Grüße

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)

Ähnliche fragen