Ошибка времени выполнения 459 при использовании WithEvents с классом, который реализует другого

Я разрабатываю проект VBA в Word и встретился с проблемой с обработкой событий при использовании класса, который реализует другого.

Я определяю пустой класс, IMyInterface:

Public Sub Xyz()
End Sub

Public Event SomeEvent()

И класс, MyClass это реализует вышеупомянутое:

Implements IMyInterface

Public Event SomeEvent()

Public Sub Xyz()
  ' ... code ...
  RaiseEvent SomeEvent
End Sub

Private Sub IMyInterface_Xyz()
   Xyz
End  Sub

Если я создаю третий класс, OtherClass, это объявляет членскую переменную с типом интерфейсного класса:

Private WithEvents mMy As IMyInterface

и попытайтесь инициализировать эту переменную с экземпляром класса с реализацией:

Set mMy = New MyClass

Я получаю ошибку времени выполнения '459': Этот компонент не поддерживает этот набор событий.

Страница MSDN для этого сообщения об ошибке состояния:

"Вы пытались использовать переменную WithEvents с компонентом, который не может работать источником события для указанного набора событий. Например, можно снижать события объекта, затем создать другой объект который Реализации первый объект. Хотя Вы могли бы думать, что могли снизить события от реализованного объекта, который автоматически не имеет место. Реализации только реализуют интерфейс для методов и свойств".

Вышеупомянутое в значительной степени подводит итог того, что я пытаюсь сделать. Формулировка, "это автоматически не имеет место", а не "это, утончаются невозможные", кажется, предполагает, что существует некоторый бит физического труда, который я должен сделать, чтобы заставить это работать, но это не говорит мне что! Кто-либо знает, возможно ли это в VBA?

7
задан Deduplicator 24 February 2015 в 21:16
поделиться

1 ответ

По-видимому, события не могут быть переданы через интерфейсный класс в конкретный класс, как вы хотите, используя "Implements". В этой статье говорится: "Декларации событий абстрактного интерфейса не включаются в интерфейс, который наследуется конкретными классами". Я нигде не нашел, чтобы это было признано ошибкой; однако, похоже, что это действительно ошибка."

Вот ссылка на источник: http://www.devx.com/getHelpOn/10MinuteSolution/20416

:-(

5
ответ дан 7 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: