2009-07-31 4 views
15

Tôi có một dự án VB6 cũ hơn mà tôi đang cố gắng để thêm các bài kiểm tra đơn vị cho. Tôi đã phá vỡ sự phụ thuộc trong các lớp học bằng cách chế nhạo các đối tượng. Mọi thứ diễn ra tuyệt vời cho đến khi tôi tìm thấy một số phụ thuộc đã gây ra các sự kiện và bây giờ tôi đã đánh một bức tường.VB6 Thực hiện & sự kiện

Dưới đây là một ví dụ nhanh về những gì tôi đang cố gắng để làm điều đó không làm việc:

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 ai biết nếu có một cách để làm cho công việc này hoặc một cách khác để đi về xử lý tình trạng này?

Tôi đã triển khai giao diện gọi lại mà tôi gọi là ITabEventsHandler. Nó trông giống như thế này:

Option Explicit 

Public Sub Click(intPreviousTab As Integer, objSSTab As Object) 

End Sub 

Sau đó, tôi thêm Implements ITabEventsHandler mẫu của tôi và thông qua các hình thức như một tham số ITabEventsHandler để initializer clsTab tôi. Thay vì tăng sự kiện Click(...) tùy chỉnh, tôi chỉ có thể gọi mTabEventsHandler.Click(...).

Cảm ơn bạn đã đề xuất!

Trả lời

10

Bạn không thể "triển khai" các giao diện nguồn trong VB6. Vì vậy, câu trả lời ngắn gọn là "không, bạn không thể làm điều này". Bạn có thể hack nó với chỉnh sửa typelib trực tiếp nhưng điều này sẽ trở nên xấu xí rất nhanh chóng.

Bạn có thể xem xét các giao diện gọi lại trong trường hợp của bạn nếu bạn phải "triển khai" các lớp khác nhau (giả).

+0

Tôi đã nghĩ đến việc tạo giao diện gọi lại và có vẻ như thao tác này sẽ hoạt động. –

+0

Được phân bổ. Cách thanh lịch nhất để đối phó với điều này trong VB6 là sử dụng một giao diện gọi lại thay vì các sự kiện thô. Cuộc tấn công của Typelib sẽ nhanh chóng trở nên khó chịu như wqw nói. –

+1

+1. Hướng dẫn VB6 nói Implements không hỗ trợ các sự kiện ở đây http://msdn.microsoft.com/en-us/library/aa262327(VS.60).aspx – MarkJ