在 VBA 中实现接口的事件

Posted

技术标签:

【中文标题】在 VBA 中实现接口的事件【英文标题】:Implementing interface's event in VBA 【发布时间】:2019-02-27 13:19:00 【问题描述】:

我有一个界面IView:

 Option Explicit

Public Event OnClientSelected()

Public Property Get ClientNames() As Variant
End Property
(...)

但我无法在我的用户表单中实现该事件。允许实现属性和子类,但不允许实现事件。

可以用事件做接口实现吗?

【问题讨论】:

你是否以WithEvents的形式声明了IView对象? 我希望表单是接口的实现,所以我没有 IView 对象。我使用:实现 IView 一个MCVE 会很好。我认为您不能直接拥有事件处理和接口(WithEvents 和 Implements)。见***.com/questions/41023670/… 不,这是不可能的。验证这一点的最佳方法是不实现Event 以及接口的其余部分。这仍然可以编译 - 如果 Event 被认为是接口的一部分,你会得到一个编译错误。 【参考方案1】:

你使用 withevents 了吗?

我已完成以下操作,为您的班级添加了 test 函数

Private WithEvents iface As clsIface

Private Sub UserForm_Initialize()
    Set iface = New clsIface
End Sub

Private Sub iface_OnClientSelected()
    '   Event subscription
End Sub

Private Sub UserForm_Click()
    iface.test
End Sub

添加到类的函数

Public Function test()
    RaiseEvent OnClientSelected
End Function

【讨论】:

以上是关于在 VBA 中实现接口的事件的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中实现 Typescript 接口

在 C++ 中实现多个接口

在同步对象中实现异步接口

是否可以在 GraphQL 中实现多个接口?

在 C# 中实现接口与显式实现接口 [重复]

用相同的方法在一个类中实现两个接口。哪个接口方法被覆盖?