MS Word 应用程序退出事件仅在 Word 2007 上第二次触发



每当特定的MS Word应用程序实例退出时,我需要运行一些逻辑。我正在使用Microsoft.Office.Interop.Word来:

  1. 创建我的 Word 应用程序实例
  2. 打开文档
  3. 选择一些表单域并更改其文本。
  4. 使 Word 应用程序对用户可见以进行交互。
  5. 用户交互后,使用Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit事件处理程序捕获退出事件(当用户退出 Word 时(

我正在使用一台现代计算机来开发运行 Office 365 (Word 16( 的应用程序,该事件在第一次尝试时会毫无问题地触发。

但是,在运行 Word 2007 的较旧计算机上(必须部署我正在开发的程序(,该事件仅在第二次创建实例后触发。我觉得很奇怪。

这是我的代码。它在 WinFormsbtn_click事件中运行。

//instantiate word application
Microsoft.Office.Interop.Word.Application wordApp = null;
wordApp = new Microsoft.Office.Interop.Word.Application();
//open document
Document wordDoc = wordApp.Documents.Open(WordDocumentPath);
//use a dictionary to fill in the form fields
foreach (KeyValuePair<string, string> fieldValue in FieldsValues)
{
FormField formField = wordDoc.FormFields[fieldValue.Key];
formField.Select();
formField.Result = fieldValue.Value;
}
//make Word UI visible and bring to front
wordApp.Visible = true;
wordDoc.Activate();
wordApp.Activate();
//handle quit event
ApplicationEvents4_Event wordEvents = wordApp;
wordEvents.Quit += OnWordQuit;

OnWordQuit()方法上,我将运行一些逻辑,但现在我只使用消息框

//only runs on Word 2007 when I click the button for the second time
private void OnWordQuit()
{
MessageBox.Show("OnWordQuit");
}

我想问题是您将事件处理程序OnWordQuit附加到局部变量wordEventsQuit属性,该属性仅存在于您btn_click事件处理程序中。

一旦事件处理程序完成btn_click此变量就会超出范围。那是在 Word 实际关闭之前很久,wordEvents.Quit事件处理程序可能会转到 garbadge,并且没有任何反应可以对此做出反应。

尝试在 Form 类上声明ApplicationEvents4_Event wordEvents字段,并将事件处理程序分配给此字段。您的代码应像这样更改:

//ApplicationEvents4_Event wordEvents = wordApp;
this.wordEvents.Quit += OnWordQuit;     //  field or property ApplicationEvents4_Event wordEvents should be defined on the form class

通过这种方式,您将确保只要您的表单处于打开状态,OnWordQuit 就会存活下来......

最新更新