如何:在宏中创建用于特定项目类型的事件处理程序
更新:2007 年 11 月
每个宏项目中的 EnvironmentEvents 模板包含许多预先声明的事件处理程序。可以实现这些事件处理程序,以对许多环境事件作出响应,如窗口关闭等。一旦提供该实现,则这些常规扩展性事件处理程序会自动截获在 Visual Studio 集成开发环境 (IDE) 中每次发生的指定事件。有关更多信息,请参见如何:在宏中处理环境事件。
您也可以将自己的 IDE 事件处理程序添加到 EnvironmentEvents 模板。声明一个事件变量,并为其提供事件处理程序代码,然后添加 OnMacrosRuntimeReset 和 OnStartupComplete 处理程序,以自动截获 Visual Studio IDE 中的事件。
此示例添加一个 ReferencesEvents 事件处理程序,该处理程序在将引用添加到 Visual C#、Visual Basic 或 Visual J# 项目时激发。
说明: |
---|
您看到的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。这些过程是使用现用的常规开发设置开发的。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
将 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 或 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
最后,将以下代码粘贴到 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