Visio外接程序,其中/何时注册WindowTurnedToPage

问题描述 投票:0回答:1

我正在开发C#VSTO Visio插件。在插件中,当用户在给定文档中选择其他页面时,我想检测并触发页面翻转事件处理程序。我已经看到以下与注册事件有关的线程:

Catch WindowTurnedToPage Event in a Visio AddIn project

复制此逻辑,我已经在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”。似乎在注册事件处理程序和正在注册的Document / ActivePage之间存在计时问题。

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

将不胜感激。

感谢和问候,安德鲁

c# visual-studio vsto add-in visio
1个回答
0
投票

我发现注册“打开文档的处理程序”首先会达到我想要的结果。

        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类成为singelton,才能获取Application实例的句柄以注册文档打开的处理程序。不确定是否有意外的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.