如何:在宏中创建用于特定项目类型的事件处理程序
每个宏项目中的 EnvironmentEvents 模板包含许多预先声明的事件处理程序。 可以实现这些事件处理程序,以对许多环境事件作出响应,如窗口关闭等。 一旦提供该实现,则这些常规扩展性事件处理程序会自动截获在 Visual Studio 集成开发环境 (IDE) 中每次发生的指定事件。 有关更多信息,请参见如何:在宏中处理环境事件。
您也可以将自己的 IDE 事件处理程序添加到 EnvironmentEvents 模板。 声明一个事件变量,并为其提供事件处理程序代码,然后添加 OnMacrosRuntimeReset 和 OnStartupComplete 处理程序,以自动截获 Visual Studio IDE 中的事件。
此示例添加一个 ReferencesEvents 事件处理程序,该处理程序在将引用添加到 Visual C# 或 Visual Basic 项目时激发。
提示
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 这些过程是在“常规开发设置”处于活动状态时开发的。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见 使用设置。
将 VSLangProj 事件处理程序添加到宏
在宏 IDE 中的**“项目”菜单上,单击“添加引用”**。
在**“添加引用”对话框中,选择 VSLangProj,单击“添加”,再单击“确定”**。
在宏 IDE 的**“类视图”资源管理器窗格中,展开 MyMacros,然后双击“EnvironmentEvents”**,使其显示在宏编辑器窗格中。
在**“EnvironmentEvents”**模块的顶部添加:
Imports VSLangProj
在**“EnvironmentEvents”**模块中标记为“自动生成的代码,不要修改”的隐藏区域后,输入事件的声明:
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
该声明将 ReferencesEvents 及其方法添加到宏 IDE 代码编辑器中的**“类名”和“方法名”**下拉框中。
使用**“类名”下拉框选择 DTEEvents,使用“方法名”**下拉框选择 OnMacrosRuntimeReset 和 OnStartupComplete。
这将为这两个事件创建事件处理程序。 这些事件处理程序是 ReferencesEvents 处理程序必需的,以便自动截获在 Visual Studio IDE 中发生的每次事件。
通过添加 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