2009-07-31 12 views
15

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ę!

Odpowiedz

10

Nie można w ogóle "implementować" interfejsów źródłowych w VB6. Krótka odpowiedź brzmi "nie, nie możesz tego zrobić". Możesz go zhakować za pomocą bezpośredniej edycji typelibu, ale to bardzo szybko stanie się brzydkie.

Możesz rozważyć użycie interfejsów zwrotnych w twoim przypadku, jeśli musisz "zaimplementować" te różne klasy (symulowane).

+0

Myślałem o stworzeniu interfejsu wywołania zwrotnego i wygląda na to, że to zadziała. –

+0

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

+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