在 Visio AddIn 项目中捕获 WindowTurnedToPage 事件

Catch WindowTurnedToPage Event in a Visio AddIn project

当用户在 visio window 的页面之间切换时,我正在尝试执行一些代码。所以我试图捕捉 WindowTurnedToPage 事件,但它根本不起作用。 他家的其他事情都能被抓到,他们该反应的时候就反应。但是 WindowTurnedToPage 和 BeforeWindowPageTurn 没有响应。

private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        Application.Window.WindowTurnedToPage +=  new Visio.EWindow_WindowTurnedToPageEventHandler(Window_WindowTurnedToPage);
    }

    private void Window_WindowTurnedToPage(Visio.Window Window)
    {
        MessageBox.Show("Page changed");
    }

请提供任何帮助,我们将不胜感激。应该怎样捕捉翻页事件?

这可能看起来很愚蠢,但我找到了答案,我 post 任何发现这个问题的人都可以通过它。 走错路和走好路的区别很简单:

错误:Application.Window.WindowTurnedToPage += new Visio.EWindow_WindowTurnedToPageEventHandler(Window_WindowTurnedToPage);

正确:Application.ActiveWindow.WindowTurnedToPage += new Visio.EWindow_WindowTurnedToPageEventHandler(Window_WindowTurnedToPage);

我需要指出的是,如果您使用第二种实现方式,它将无法在 InternalStartup() 上运行。所以你需要在 window.

初始化之后实现它

我想你可以使用 Application.WindowTurnedToPage

这将触发应用程序中的所有页面切换。

您的第一个版本 Application.Window.WindowTurnedToPage 没有工作,因为 Application.Window 是主要应用程序 window(即框架 window - 不是绘图 window),所以它没有任何页面。

第二个版本 Application.ActiveWindow.WindowTurnedToPage 可能有一个缺陷 - 它会将您的事件绑定到您执行代码时处于活动状态的 window。如果稍后打开另一个文件,您的代码将不会触发该文件的 window.

事件

但是,如果您只想捕获单个 window 的页面切换,那可能没问题。