我也对此感到沮丧.你在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;
}
Run Code Online (Sandbox Code Playgroud)
我发现这行总是谎言/返回true:
this.ActiveWindow.Active()
Run Code Online (Sandbox Code Playgroud)
但这样做效果更好(全局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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |