2013-02-11 67 views
2

我已經查找並無法找到解決我的問題的方法。我爲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

回答

1

在模態對話框顯示時運行此代碼會干擾窗口激活。

我不確定這種干擾的機制究竟是什麼,但修復很簡單。將代碼移到對話框外。調用ShowDialog後立即執行此代碼。