如何使用C#设置活动(即前景)Word文档

问题描述:

我已经查找并无法找到解决我的问题的方法。我为Word 2007开发了一个附加功能区,它提供了一组额外的加载和保存功能,允许用户从定制系统加载和保存文档。如何使用C#设置活动(即前景)Word文档

我大部分工作 - 当用户请求打开一个文件,它被下载并保存到AppData文件夹,然后打开。但是,我遇到的问题是,如果用户例如打开Word并使用这个新的“加载”功能,空白的Word文档仍然存在,Word很高兴地打开新文档,但它没有得到重点。我在Windows 7上,它在新文档的任务栏中创建了第二个'W'图标,但是它不会像Word那样使用该图标切换到它。正常'打开'的路线。)

我试过(由于在这里其他地方发现的建议)要么设置'可见'属性为真,并调用doc.Activate(),但都不是我所需要的。我错过了什么?我使用打开该文件的代码如下:

private void OK_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
    FES.FESServices wService = new FES.FESServices(); 
    int request_id = wService.SubmitRequestFromAddIn(username, password, "RETR", "", textBox1.Text, "", ""); 
    FES.FileRequestResponse response = wService.GetFileMembersFromAddIn(username, password, request_id); 
    if (response.ResponseType == "RETR") 
    { 
     byte[] data = wService.GetBytesForFilename(response.ResponseValue); 
     //MessageBox.Show("Loaded data for file..."); 
     //MessageBox.Show(Application.UserAppDataPath); 
     FileStream fs = new FileStream(Application.UserAppDataPath + "\\" + response.ResponseValue.Substring(6).Split('~')[0], FileMode.Create, FileAccess.Write); 
     fs.Write(data, 0, (int)data.Length); 
     fs.Close(); 
     object oMissing = System.Reflection.Missing.Value; 

     Microsoft.Office.Interop.Word.Document doc = Globals.ThisAddIn.Application.Documents.Open(
      Application.UserAppDataPath + "\\" + response.ResponseValue.Substring(6).Split('~')[0], Visible:true 
     ); 
     doc.Activate(); 
    } 
} 

(我已经包含this.Close()作为加载文档的功能模态对话框内举行,并没有先关闭它,字约抛出一个异常打开对话框切换文档)。

任何帮助感激地收到!

+1

处理模态对话听起来有点奇怪。尝试将此代码移出“OK_Click”并在调用ShowDialog()之后运行,以显示此对话框。另外,另外,你应该在'FileStream'周围使用'using'。 – 2013-02-11 22:47:59

+1

@DavidHeffernan - 将代码移动到正确的位置(即在最初的'ShowDialog()'调用后修复所有内容。 – 2013-02-11 23:28:51

在模态对话框显示时运行此代码会干扰窗口激活。

我不确定这种干扰的机制究竟是什么,但修复很简单。将代码移到对话框外。调用ShowDialog后立即执行此代码。