【问题标题】:Catch WindowTurnedToPage Event in a Visio AddIn project在 Visio 插件项目中捕获 WindowTurnedToPage 事件
【发布时间】:2018-03-22 23:14:49
【问题描述】:

当用户在 visio 窗口的页面之间切换时,我正在尝试执行一些代码。所以我试图捕捉 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");
    }

任何帮助将不胜感激。应该如何捕捉翻页事件?

【问题讨论】:

    标签: c# events visio office-addins visual-studio-addins


    【解决方案1】:

    我认为你可以使用Application.WindowTurnedToPage

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

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

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

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

    【讨论】:

      【解决方案2】:

      这可能看起来很愚蠢,但我找到了答案,我将它发布给任何发现问题的人通过它。 错误的方式和好的方式之间的区别很简单:

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

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

      我需要提一下,如果您使用第二个实现,它将无法在 InternalStartup() 上运行。所以需要在窗口初始化后实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        相关资源
        最近更新 更多