代码之家  ›  专栏  ›  技术社区  ›  Dimitrie Vatra

捕获Visio加载项项目中的WindowTurnedToPage事件

  •  0
  • Dimitrie Vatra  · 技术社区  · 7 年前

    当用户在visio窗口的页面之间交换时,我试图执行一些代码。所以我尝试捕捉WindowTurnedToPage事件,但它根本不起作用。 他的家人发生的其他事件可以被发现,他们会在应该的时候做出回应。但是WindowTurnedToPage和WindowPageTurner之前没有响应。

    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");
        }
    

    请帮忙,我会很感激的。ito应该做什么来捕捉翻页事件?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Nikolay    7 年前

    我想你可以 Application.WindowTurnedToPage

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

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

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

    然而,如果您只想捕获单个窗口的页面切换,这可能是可以的。

        2
  •  0
  •   Dimitrie Vatra    7 年前

    这可能看起来很愚蠢,但我找到了答案,我把它张贴给任何发现这个问题的人,让他们通过。 错误的方式和好的方式的区别很简单:

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

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

    我需要指出的是,如果使用第二个实现,它将无法在InternalStartup()上工作。因此,您需要在初始化窗口之后实现它。