Несмотря на то, что вы объявили объект события и написали обработчик события, это еще не все: вам нужно еще инициализировать объект события. Исполняющая среда макросов сама имеет два события, которые вам необходимо перехватить для того, чтобы обеспечить правильную инициализацию объекта события при каждом старте или сбросе исполняющей среды макросов. Без этого шага объект события синтаксически завершен, но не получит никаких событий от основной интегрированной среды разработки.
Вам необходимо позаботиться о двух событиях, причем оба они предоставляются классом DTEEvents. Первое из них — это DTEEvents . OnMacrosRuntimeReset; это событие происходит тогда, когда по какой-либо причине происходит сброс исполняющей среды. Поскольку сброс исполняющей среды вызывает очистку всего глобального состояния (и в том числе и связи с событиями), то это помешает перехвату событий (если вы не инициализировали объект события в процессе сброса).
Обработка этого события аналогична обработке любого другого: вы используете раскрывающиеся списки типов и членов для генерирования скелета кода, а затем вставляете код инициализации объекта события:
Private Sub DTEEvents_OnMacrosRuntimeReset() Handles DTEEvents.OnMacrosRuntimeReset
WindowVisibilityEvents = CType(DTE.Events,Events2).WindowVisibilityEvents
End Sub
Второе событие, которое вам необходимо перехватить — это DTEEvents.OnStartupComplete. Оно происходит тогда, когда исполняющая среда и макросреда завершили свой запуск:
Private Sub DTEEvents_OnStartupComplete() Handles DTEEvents.OnStartupComplete . WindowVisibilityEvents = CType(DTE.Events, Events2).WindowVisibilityEvents End Sub
Посредством инициализации объекта события при каждом старте или сбросе исполняющей среды вы обеспечиваете жизнеспособную активную связь с движком событий интегрированной среды.
Для тестирования обработчика событий вы просто переходите в основную интегрированную среду и закрываете (или скрываете) любое из окон инструментов (нажатием кнопки Close окна). Если вы сделали все правильно, то увидите окно сообщения, показанное на рис. 12.10.
Совет
Если вы добавили в ваш макропроект новое объявление события и не можете заставить сработать его обработчик, то причин для этого может быть несколько. Во-первых, убедитесь, что вы правильно добавили код инициализации класса событий как в событие OnStartupComplete, так и в событие OnMacrosRuntimeReset. Во-вторых, вам может понадобиться выгрузить и вновь загрузить ваш макропроект (для того чтобы установить "подключение" для вашего события). Для выгрузки макропроекта закройте среду Macros (если она открыта) и в окне Macro Explorer основной интегрированной среды щелкните правой кнопкой мыши по макропроекту (в который вы добавили события) и выберите Unload Macro Project. Затем добавьте макропроект обратно при помощи щелчка правой кнопкой мыши по корневому узлу Macros в Macro Explorer и выбора пункта Load Macro Project. Убедитесь в том, что вы выбрали вариант Enable Event Handling Code в диалоговом окне обеспечения безопасности (которое появляется при запуске проекта).