2

私は自分の問題の解決策を探しましたが、見つけられませんでした。私は Word 2007 用のアドイン リボンを開発しました。これは追加のロードおよび保存機能を提供し、ユーザーが特注のシステムからドキュメントをロードおよび保存できるようにします。

ユーザーがファイルを開くように要求すると、ファイルがダウンロードされ、AppData フォルダーに保存されてから開かれます。ただし、私が抱えている問題は、たとえばユーザーが Word を開いてこの新しい「読み込み」機能を使用すると、空白の Word 文書が残り、Word は新しい文書を非常にうまく開くが、フォーカスが得られないことです。

(私は Windows 7 を使用しており、新しいドキュメントのタスク バーに 2 つ目の 'W' アイコンを作成しますが、通常の '開く' を使用した場合の Word と同じようには切り替わりません)ルート。)

私は(ここの他の場所で見つかった提案の結果として)「visible」属性を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 はダイアログ ボックスを開いた状態でドキュメントを切り替えることについて例外をスローします)。

どんな助けでもありがたく受け取った!

4

1 に答える 1

1

モーダル ダイアログが表示されているときにこのコードを実行すると、ウィンドウのアクティブ化が妨げられます。

この干渉のメカニズムが正確にはわかりませんが、修正は簡単です。コードをダイアログの外に移動します。ShowDialog への呼び出しが返された直後に、このコードを実行します。

于 2013-02-11T23:31:43.953 に答える