2014-11-21 87 views
0

我有一個簡單贏窗體應用程序,它由一個Button控制的,一個OpenFileDialog組分和Microsoft.Office.Interop.Word.Application對象:防止終止最後一個文檔

using System; 
using System.Windows.Forms; 

namespace WordInterop 
{ 
    public partial class Form1 : Form 
    { 

     // From Form1.Designer.cs: 
     //Button openButton; 
     //FileOpenDialog openFileDialog; 

     private Microsoft.Office.Interop.Word.Application _wordApp; 

     public Form1() 
     { 
      InitializeComponent(); 
      _wordApp = new Microsoft.Office.Interop.Word.Application(); 
     } 

     protected override void OnClosed(EventArgs e) 
     { 
      _wordApp.Quit(); 
      base.OnClosed(e); 
     } 

     private void _openButton_Click(object sender, EventArgs e) 
     { 
      DialogResult result = openFileDialog.ShowDialog(); 
      if (result == DialogResult.OK) { 

       // Throws COMException if Word app is not longer running 
       _wordApp.Documents.Open(openFileDialog.FileName); 

       _wordApp.Visible = true; 
      } 
     } 
    } 
} 

當用戶點擊Open按鈕,他們可以通過OpenFileDialog選擇Word文檔。所選文檔的文件名用於使用Microsoft.Office.Interop.Word.Application對象打開Word文檔。

似乎當用戶關閉最後一個文檔Word應用程序被終止:如果用戶點擊Open按鈕,選擇文檔,關閉文檔,點擊Open按鈕並選擇文檔的第二時間,一個COMException出現消息RPC服務器不可用。如果至少打開一個文檔,則用戶可以在不發生COMException的情況下打開文檔。

有沒有辦法阻止Word應用程序在用戶關閉最後一個文檔時終止?

我試圖通過改變Form1構造函數創建一個隱藏的空白文檔如下:

public Form1() 
{ 
    InitializeComponent(); 
    _wordApp = new Microsoft.Office.Interop.Word.Application(); 
    _wordApp.Documents.Add(Visible: false); 
} 

然而,當用戶打開文檔意味着它仍然有可能讓用戶終止該Word應用程序的空白文檔變得可見。

+0

爲什麼不直接將'_wordApp = new Microsoft.Office.Interop.Word.Application();'添加到'_openButton_Click'? – waka 2014-11-21 15:13:53

回答

0

在按鈕單擊上創建一個新的Microsoft.Office.Interop.Word.Application()實例。

private void _openButton_Click(object sender, EventArgs e) 
    { 
     DialogResult result = openFileDialog.ShowDialog(); 
     if (result == DialogResult.OK) { 

      _wordApp = new Microsoft.Office.Interop.Word.Application(); 
      _wordApp.Documents.Open(openFileDialog.FileName); 
      _wordApp.Visible = true; 
     } 
    }