ユニットテストを追加しようとしている古いVB6プロジェクトがあります。私はオブジェクトを嘲笑してクラスの依存関係を壊していました。私はイベントを起こしているいくつかの依存関係を見つけて、今私は壁に衝突しました。VB6実装とイベント
は、ここで私はそれが動作しない何をしようとしているの簡単な例です:
ITab.cls:
Option Explicit
Public Event Click(tabNumber As Integer)
Public Sub SomeOtherFunction()
End Sub
clsRealTab.cls:
Option Explicit
Implements ITab
Public Event Click(tabNumber As Integer)
Public Sub ITab_SomeOtherFunction()
'code here'
End Sub
frmMain。 frm:
Option Explicit
Private WithEvents mTab as ITab
Public Sub Main()
Set mTab = New clsRealTab 'gives "Object or class does not support the set of events" error'
End Sub
Doeこの仕事をする方法や、このような状況に対処する別の方法があるかどうかを知っている人は誰ですか?
ITabEventsHandler
というコールバックインターフェイスを実装しました。その後、私は自分のフォームにImplements ITabEventsHandler
を追加
Option Explicit
Public Sub Click(intPreviousTab As Integer, objSSTab As Object)
End Sub
と私のclsTab初期化子にITabEventsHandler
パラメータとしてフォームを渡す:それはこのようになります。カスタムClick(...)
イベントを呼び出す代わりに、mTabEventsHandler.Click(...)
に電話することができます。
ありがとうございました!
私はコールバックインターフェイスを作成することを考えました。これはうまくいくようです。 –
Seconded。 VB6でこれを処理する最もエレガントな方法は、生のイベントの代わりにコールバックインターフェイスを使用することです。 wqwが言うように、Typelibのハッキングはすばやく不快になります。 –
+1。 VB6マニュアルにはImplementsがここでイベントをサポートしていないと記載されています。http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ