如何:在宏中创建用于特定项目类型的事件处理程序

每个宏项目中的 EnvironmentEvents 模板包含许多预先声明的事件处理程序。 可以实现这些事件处理程序,以对许多环境事件作出响应,如窗口关闭等。 一旦提供该实现,则这些常规扩展性事件处理程序会自动截获在 Visual Studio 集成开发环境 (IDE) 中每次发生的指定事件。 有关更多信息,请参见如何:在宏中处理环境事件

您也可以将自己的 IDE 事件处理程序添加到 EnvironmentEvents 模板。 声明一个事件变量,并为其提供事件处理程序代码,然后添加 OnMacrosRuntimeResetOnStartupComplete 处理程序,以自动截获 Visual Studio IDE 中的事件。

此示例添加一个 ReferencesEvents 事件处理程序,该处理程序在将引用添加到 Visual C# 或 Visual Basic 项目时激发。

提示

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 这些过程是在“常规开发设置”处于活动状态时开发的。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见 使用设置

将 VSLangProj 事件处理程序添加到宏

  1. 在宏 IDE 中的**“项目”菜单上,单击“添加引用”**。

  2. 在**“添加引用”对话框中,选择 VSLangProj,单击“添加”,再单击“确定”**。

  3. 在宏 IDE 的**“类视图”资源管理器窗格中,展开 MyMacros,然后双击“EnvironmentEvents”**,使其显示在宏编辑器窗格中。

  4. 在**“EnvironmentEvents”**模块的顶部添加:

    Imports VSLangProj
    
  5. 在**“EnvironmentEvents”**模块中标记为“自动生成的代码,不要修改”的隐藏区域后,输入事件的声明:

    <System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
    

    该声明将 ReferencesEvents 及其方法添加到宏 IDE 代码编辑器中的**“类名”“方法名”**下拉框中。

  6. 使用**“类名”下拉框选择 DTEEvents,使用“方法名”**下拉框选择 OnMacrosRuntimeResetOnStartupComplete

    这将为这两个事件创建事件处理程序。 这些事件处理程序是 ReferencesEvents 处理程序必需的,以便自动截获在 Visual Studio IDE 中发生的每次事件。

  7. 通过添加 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
    
  8. 最后,将以下代码粘贴到 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
    
  9. 若要测试事件处理程序,请创建一个任意类型的 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#)

其他资源

响应事件(Visual Basic 和 Visual C# 项目)

响应自动化事件