Mam starszy projekt VB6, do którego próbuję dodać testy jednostkowe. Łamałem zależności w klasach przez kpiny z obiektów. Wszystko szło świetnie, dopóki nie znalazłem zależności, które podniosły wydarzenia i teraz uderzyłem w ścianę.Implementacje i zdarzenia VB6
Oto krótki przykład tego, co staram się robić to nie działa:
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 Czy ktokolwiek wie, czy jest jakiś sposób, aby to zrobić, lub w inny sposób radzić sobie z tą sytuacją?
Zaimplementowałem interfejs wywołania zwrotnego, który nazwałem ITabEventsHandler
. Wygląda to tak:
Option Explicit
Public Sub Click(intPreviousTab As Integer, objSSTab As Object)
End Sub
Potem dodałem Implements ITabEventsHandler
do mojej postaci i przekazać formularz jako parametr do mojej clsTab inicjatora ITabEventsHandler
. Zamiast podnosić niestandardowe zdarzenie Click(...)
, mogę po prostu zadzwonić pod numer mTabEventsHandler.Click(...)
.
Dzięki za sugestię!
Myślałem o stworzeniu interfejsu wywołania zwrotnego i wygląda na to, że to zadziała. –
Oddelegowany. Najbardziej eleganckim sposobem radzenia sobie z tym w VB6 jest użycie interfejsu wywołań zwrotnych zamiast surowych zdarzeń. Hackowanie Typelib szybko stanie się nieprzyjemne, jak mówi wqw. –
+1. Instrukcja VB6 mówi, że narzędzia Implements nie obsługują zdarzeń tutaj http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ