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

更新:2007 年 11 月

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

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

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

ms228948.alert_note(zh-cn,VS.90).gif说明:

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

将 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 或 Visual J# 项目时截获事件,请分别将字符串 CSharpReferencesEvents 替换为 VBReferencesEvents 或 VJSharpReferencesEvents。

    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 模块中。

ms228948.alert_note(zh-cn,VS.90).gif说明:

添加该事件处理程序之后,则在每次将引用添加到指定的项目类型中时激发该事件处理程序。如果您不希望在每次添加引用时收到通知,请注释掉此代码。

<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# 项目)

响应自动化事件