【问题标题】:How to set the active (i.e. foreground) Word document using C#如何使用 C# 设置活动(即前台)Word 文档
【发布时间】:2013-02-12 16:39:08
【问题描述】:

我已查看但未能找到解决问题的方法。我为 Word 2007 开发了一个插件功能区,它提供了一组额外的加载和保存功能,允许用户从定制系统加载和保存文档。

我的大部分工作都在工作 - 当用户请求打开一个文件时,它会被下载并保存到 AppData 文件夹中,然后再打开。但是,我遇到的问题是,例如,如果用户打开 Word 并使用这个新的“加载”功能,空白 Word 文档仍然存在,Word 很高兴地打开了新文档,但它没有获得焦点。

(我在 Windows 7 上,它在任务栏中为新文档创建了第二个“W”图标,但它不会像我使用普通的 Word 那样切换到它“开放”路线。)

我已经尝试(由于在此处其他地方找到的建议)将“可见”属性设置为 true,并调用 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(),因为加载文档的函数被保存在一个模式对话框中,并且在没有先关闭它的情况下,Word 会抛出一个关于在对话框打开的情况下切换文档的异常。

感谢您的帮助!

【问题讨论】:

  • 模式对话框的处理听起来有点奇怪。尝试将此代码移出OK_Click 并在调用您用来显示此对话框的ShowDialog() 之后运行它。另外,顺便说一句,您的FileStream 周围应该有一个using
  • @DavidHeffernan - 将代码移动到正确的位置(即在最初的 ShowDialog() 调用修复了所有问题之后。

标签: c# ms-word


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多