Visio Addin 在何处/何时注册 WindowTurnedToPage



我正在开发一个C# VSTO Visio Addin。在插件中,我想在用户选择给定文档中的不同页面时检测并触发页面转换事件处理程序。我看到了以下有关注册事件的线程:

在 Visio 加载项项目中捕获窗口翻转到页面事件

复制此逻辑,我在 ThisAddIn.cs 中尝试了以下内容:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.ActiveWindow.WindowTurnedToPage += new Visio.EWindow_WindowTurnedToPageEventHandler( Window_WindowTurnedToPage);
}
public void Window_WindowTurnedToPage(Visio.Window Window)
{
Debug.WriteLine(String.Format("Window changed to {0}", Window.Application.ActivePage.Name ));
}

但是,当我尝试将事件处理程序注册为调用ThisAddin_Startup的一部分时,我得到了一个 NPE,因为尚未设置"ActiveWindow"。注册事件处理程序和正在注册的文档/活动页面之间似乎存在计时问题。

总之,我希望我的 Visio Adddin 在加载文档中的活动页面更改时检测并响应用户事件。

任何帮助将不胜感激。

感谢和问候, 安德鲁

我发现注册"文档打开处理程序"首先可以实现我正在寻找的结果。

private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
ThisAddIn addin = ThisAddIn.getInstance();
if (addin != null )
{
addin.Application.DocumentOpened += Application_DocumentOpened;
}
}
private void Application_DocumentOpened(Visio.Document doc)
{
if (doc.Application != null)
{
Visio.EApplication_WindowTurnedToPageEventHandler appHandler = new Visio.EApplication_WindowTurnedToPageEventHandler(Application_WindowTurnedToPage);
doc.Application.WindowTurnedToPage += appHandler;
}
}

因此,当打开文档时,将注册窗口转到页面事件处理程序。但是,我必须使 ThisAddIn 类成为单项,以获取应用程序实例的句柄以注册文档打开的处理程序。不确定是否有意想不到的副作用。

最新更新