代码之家  ›  专栏  ›  技术社区  ›  Peder Rice

vsto:应用程序焦点

  •  6
  • Peder Rice  · 技术社区  · 16 年前

    有没有人知道如何查看vsto项目的excel窗口是否处于活动/焦点状态?

    我在找一个相当于 System.Windows.Window.IsActive .

    2 回复  |  直到 13 年前
        1
  •  7
  •   Michael Regan    14 年前

    我也为此感到沮丧。你正在使用vsto应用程序中的对话框吗?如果是这样,我所做的是在关闭windows窗体/对话框时添加一个事件,以激活office应用程序,如下所示(例如word,因此excel中可能存在差异):

    //... VSTO Startup Event
    WindowsForm form = new WindowsForm();
    form.FormClosed += new FormClosedEventHandler(form_FormClosed);
    form.Show();
    
    
    void form_FormClosed(object sender, FormClosedEventArgs e)
    {
        this.Application.Activate();         
        this.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateNormal;
    
    }
    

    我发现这句话总是假的/是真的:

    this.ActiveWindow.Active()
    

    但这更有效(全局bool变量“appactive”用于跟踪活动窗口):

    //... VSTO Startup Event    
    this.Application.WindowDeactivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowDeactivateEventHandler(Application_WindowDeactivate);
    this.Application.WindowActivate += new Microsoft.Office.Interop.Word.ApplicationEvents4_WindowActivateEventHandler(Application_WindowActivate);
    
        void Application_WindowActivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn)
        {
            AppActive = true;
        }
    
        void Application_WindowDeactivate(Microsoft.Office.Interop.Word.Document Doc, Microsoft.Office.Interop.Word.Window Wn)
        {
            AppActive = false;
        }
    
        2
  •  2
  •   musefan    13 年前

    this.ActiveWindow.Activate() 是激活窗口的方法。

    this.ActiveWindow.Active 是告诉你窗口状态的属性。