我需要处理活动浏览器对象上的selection changed事件。但是,当我在ribbon加载时订阅event Globals.ThisAddIn.Application.ActiveExplorer().SelectionChange
时,它只适用于当前活动的浏览器。
有没有像active explorer这样的事件改变了?
我还尝试浏览了explorers Globals.ThisAddIn.Application.Explorers
的列表,但该列表只包含打开的explorers。
发布于 2019-07-31 19:48:08
首先,不要在从多点表达式(例如Globals.ThisAddIn.Application.ActiveExplorer
)返回的对象上设置事件处理程序-您将在一个临时变量上设置事件处理程序,该变量将在垃圾收集器到达时立即释放。对象必须存储在一个变量中,该变量保证在您的插件生存期内保持活动状态。
其次,使用Application.Explorers.NewExplorer
事件跟踪新的资源管理器(您也可以使用Explorer.Close
事件释放特定的资源管理器对象)。
创建一个将Explorer
对象存储为其成员的包装类(您可以将Explorer
传递给它的构造函数),并为Explorer.SelectionChange
和Explorer.Close
事件设置事件处理程序。在您的插件中,声明一个包装器列表(List<MyExplorerWrapper>
)。启动时,循环遍历Application.Explorers
集合中的所有资源管理器,并为Explorers.NewExplorer
事件设置一个事件处理程序(同样,必须在插件类级别声明Explorers
才能使其保持活动状态)。
发布于 2019-07-31 19:53:39
无论是由于用户操作还是通过程序代码打开新的资源管理器窗口,都会激发Explorers.NewExplorer事件。
当资源管理器由于用户操作或通过程序代码而变为活动窗口时,将激发Explorer.Activate事件。
https://stackoverflow.com/questions/57296917
复制