Практическое руководство. Создание обработчика событий в макросе для определенного типа проекта
Шаблон EnvironmentEvents, включенный во все проекты макросов, содержит ряд заранее объявленных обработчиков событий. Эти обработчики событий можно реализовать для реагирования на различные события среды, такие как закрытие окна и пр. После реализации эти обработчики событий автоматически перехватывают события, возникающие в интегрированной среде разработки Visual Studio. Дополнительные сведения см. в разделе Практическое руководство. Обработка событий среды в макросах.
Можно добавить собственные обработчики событий интегрированной среды разработки в шаблон EnvironmentEvents. Для автоматизации перехвата событий в интегрированной среде разработки Visual Studio следует объявить переменную события, предоставить для нее код обработчика событий и добавить обработчики OnMacrosRuntimeReset и OnStartupComplete.
В этом примере добавляется обработчик событий ReferencesEvents, срабатывающий при добавлении ссылки в проект Visual C# или Visual Basic.
Примечание
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.
Чтобы добавить обработчик событий VSLangProj в макрос
В интегрированной среде разработки макросов в меню Проект выберите пункт Добавить ссылку.
В диалоговом окне Добавление ссылки выберите VSLangProj, нажмите Добавить, а затем ОК.
В области проводника Представление классов интегрированной среды разработки макросов разверните "Мои макросы" и дважды щелкните EnvironmentEvents для отображения его в редакторе макросов.
В начале модуля EnvironmentEvents добавьте:
Imports VSLangProj
Введите объявление события после скрытой области в модуле EnvironmentEvents, помеченной как "Automatically generated code, do not modify":
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
Это объявление добавляет событие ReferencesEvents и его методы в списки Имя класса и Имя метода в редакторе интегрированной среды разработки макросов.
Используйте список Имя класса для выбора DTEEvents, а список Имя метода для выбора OnMacrosRuntimeReset и OnStartupComplete.
При этом для данных двух событий создаются обработчики. Эти обработчики событий необходимы для обработчика ReferencesEvents, чтобы автоматически перехватывать события при каждом их возникновении в интегрированной среде разработки Visual Studio.
Измените обработчики событий, добавив приведение EnvironmentEvents.refEvents, как показано ниже. Для перехвата события при добавлении ссылки в проект Visual Basic замените строку CSharpReferencesEvents строкой VBReferencesEvents.
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_ DTEEvents.OnMacrosRuntimeReset EnvironmentEvents.refEvents_ =CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
и
Private Sub DTEEvents_OnStartupComplete() Handles_ DTEEvents.OnStartupComplete EnvironmentEvents.refEvents_ = CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
Вставьте следующий код в модуль EnvironmentEvents или выберите refEvents в списке Имя класса и ReferenceAdded в списке Имя метода для создания обработчика событий. Добавьте строку MsgBox(pReference.Name & " was added to the project.") в обработчик событий, как показано ниже.
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded MsgBox(pReference.Name & " was added to the project.") End Sub
Для тестирования обработчика событий создайте любой проект Visual C#.
Для каждой ссылки, автоматически добавляемой в шаблон проекта, появится сообщение.
Пример
Данный код является полным кодом примера. Можно вставить приведенный ниже код в модуль EnvironmentEvents проекта макроса.
Примечание
После добавления этого обработчика событий он будет запускаться каждый раз при добавлении ссылки в проект определенного типа.Закомментируйте этот код, если не нужно получать сообщение при каждом добавлении ссылок.
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_
DTEEvents.OnMacrosRuntimeReset
EnvironmentEvents.refEvents= _
CType(DTE.Events.GetObject("CSharpReferencesEvents")_
, VSLangProj.ReferencesEvents)
End Sub
Private Sub DTEEvents_OnStartupComplete() Handles_
DTEEvents.OnStartupComplete
EnvironmentEvents.refEvents = _
CType(DTE.Events.GetObject("CSharpReferencesEvents")_
, VSLangProj.ReferencesEvents)
End Sub
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded
MsgBox(pReference.Name & " was added to the project.")
End Sub
См. также
Задачи
Практическое руководство. Обработка событий в макросе
Практическое руководство. Обработка событий автоматизации (Visual Basic)
Практическое руководство. Обработка событий автоматизации (Visual C#)