如何:在宏中处理环境事件
更新:2007 年 11 月
每个新宏项目都包含一个名为 EnvironmentEvents 的模块,该模块仅在宏 IDE 中可见。这是一个模板项,包含若干可以在宏中实现的有用的预定义事件过程,它们是:
可以在“类名”组合框中查看这些事件过程,在“方法名称”组合框中查看其事件。两个框都位于代码编辑器的顶部。
在宏中插入预定义事件过程
在宏 IDE 中的“类视图”资源管理器窗格中双击 EnvironmentEvents 节点,可以将其显示为 EnvironmentEvents 选项卡并在宏编辑器窗格中显示一个下拉菜单。
从 EnvironmentEvents 下拉菜单中选择事件类型,如 TaskListEvents。“声明”组合框现在由可用的“任务列表”事件填充。
在“声明”下拉菜单中选择事件(例如 TaskAdded),可以将其事件过程添加到模块中。
事件插入到宏中,现在可以向事件过程添加代码了。
某些情况下,可能需要向“类名”组合框添加更多事件过程,例如 CommandEvents 事件。
添加新事件过程
向“类名”组合框添加新事件过程
在 EnvironmentEvents 模块中标记为“Automatically generated code, do not modify”(自动生成的代码,不要修改)的隐藏区域后,输入事件的声明:
<System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents ' This procedure handles DTEEvents.OnMacrosRuntimeReset.
设置 OnMacrosRuntimeReset 过程,使新的事件变量在宏每次重新运行时都初始化:
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _ DTEEvents.OnMacrosRuntimeReset CommandEvents = DTE.Events.CommandEvents End Sub
设置 OnStartupComplete 过程以完成步骤 5 中的初始化过程。
Private Sub DTEEvents_OnStartupComplete() Handles_ DTEEvents.OnStartupComplete CommandEvents = DTE.Events.CommandEvents End Sub
添加响应事件的代码。在本示例中,一条命令执行后,此过程报告已发出命令的详细信息:
Public Sub CommandEvents_AfterExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut as Object) Handles CommandEvents.AfterExecute MsgBox(DTE.Commands.Item(Guid, ID).Name) End Sub
声明新事件时,必须先初始化才能使用它。对于宏来说,初始化新事件变量的位置在 OnMacrosRuntimeReset 事件过程中。
每当重置宏的运行库就发生此事件,如加载或卸载宏时。当它发生时,全局状态有损失。就是说,全局变量的值丢失并且事件处理程序被解除挂钩,这意味着以前在事件发生时执行的代码不再这样做了。
重置宏的运行库时会发生 OnMacrosRuntimeReset 事件。这使您可以在每次宏运行库重置发生时自动重新初始化变量和事件处理程序。通过使用 OnMacrosRuntimeReset 初始化事件变量和事件处理程序,确保它们的值在每次宏运行库重置时都重新初始化,从而使新的事件过程正常工作。
请参见
任务
如何:在宏中引用 COM 和 .NET Framework 组件