Поделиться через


Практическое руководство. Обработка событий среды в макросах

Каждый новый проект макроса включает модуль, называемый EnvironmentEvents, видимый только в интегрированной среде разработки макросов. Он представляет собой шаблон, содержащий несколько широко используемых предопределенных процедур обработки событий, которые могут быть реализованы в макросе, а именно.

Эти процедуры обработки событий можно просмотреть в обозревателях объектов редактора кода.

Чтобы вставить предопределенную процедуру обработки события в макрос

  1. В области проводника Представление классов интегрированной среды разработки макросов дважды щелкните узел EnvironmentEvents для его отображения в виде вкладкиEnvironmentEvents и раскрывающегося меню на панели редактора макросов.

  2. Из раскрывающегося меню EnvironmentEvents выберите тип события, например TaskListEvents. Поле со списком Объявления при этом заполнится доступными событиями для Списка задач.

  3. В раскрывающемся меню Объявления выберите событие, например TaskAdded, и добавьте в модуль процедуру его обработки.

Событие добавится в макрос, и теперь можно добавить код в процедуру его обработки.

В некоторых случаях требуется добавить процедуры обработки событий в поле со списком Имя класса, например для событий CommandEvents.

Добавление новой процедуры обработки события

Чтобы добавить новую процедуру обработки события в поле со списком "Имя класса"

  1. Введите объявление события после скрытой области в модуле "EnvironmentEvents", помеченной как "Автоматически созданный код; не изменять".

    <System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
    ' This procedure handles DTEEvents.OnMacrosRuntimeReset.
    
  2. Измените процедуру "OnMacrosRuntimeReset" таким образом, чтобы переменная нового события инициализировалась при каждом перезапуске макроса.

    Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _
      DTEEvents.OnMacrosRuntimeReset
       CommandEvents = DTE.Events.CommandEvents
    End Sub
    
  3. Измените процедуру "OnStartupComplete" для завершения инициализации процедуры в шаге 5.

    Private Sub DTEEvents_OnStartupComplete() Handles_
      DTEEvents.OnStartupComplete
            CommandEvents = DTE.Events.CommandEvents
    End Sub
    
  4. Добавьте код обработки события. В этом примере после выполнения команды процедура сообщает подробные сведения о выполненной команде.

    Public Sub CommandEvents_AfterExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut as Object) Handles CommandEvents.AfterExecute
       MsgBox(DTE.Commands.Item(Guid, ID).Name)
    End Sub
    

При объявлении нового события его нужно инициализировать перед использованием. Инициализировать переменную нового события в макросах следует в процедуре обработки события OnMacrosRuntimeReset.

Это событие происходит каждый раз при сбросе среды выполнения макроса, например при загрузке и выгрузке макроса. При этом происходит потеря глобального состояния. То есть теряются значения глобальных переменных и отсоединяются обработчики событий, соответственно код, связанный с событием, больше не выполняется.

Когда происходит сброс среды выполнения макроса, возникает событие OnMacrosRuntimeReset. Это позволяет автоматически повторно инициализировать переменные и обработчики событий при каждом сбросе среды выполнения. Инициализация переменных и обработчиков событий в OnMacrosRuntimeReset, гарантирует повторную инициализацию их значений после каждого сброса среды выполнения макроса и, следовательно, правильную работу новых процедур обработки событий.

См. также

Задачи

Практическое руководство. Запись макросов

Практическое руководство. Запуск макросов

Практическое руководство. Запись макросов

Практическое руководство. Управление макросами

Практическое руководство. Ссылки на компоненты COM и .NET Framework в макросах

Основные понятия

Автоматизация повторяющихся действий с помощью макросов

Отладка макросов

Проблемы, связанные с записью и запуском макроса

Проблемы, связанные с безопасностью макросов и общим доступом