从“保存对话框”中捕获“取消”状态,以查找即将关闭未保存更改的MS Word文档

时间:2012-09-25 17:34:23

标签: c# .net ms-word add-in

我有一个用C#开发的Microsoft Word加载项。当用户尝试使用未保存的更改关闭文档时,将显示“保存”对话框。有没有办法捕获用户在“保存”对话框中单击“取消”?

在显示“保存”对话框之前,会恼怒地触发DocumentBeforeClose事件,并且看起来不会触发封装“保存对话框”事件的事件。

为什么我需要这个: 如果用户关闭了最后一个文档,我需要在我的加载项工具栏上进行一些清理。但是,如果我在DocumentBeforeClose事件中进行清理并且用户单击“取消”,则加载项工具栏状态不正确。

修改/更新

正如Rob Allen建议的那样,我现在正在使用ShutDown事件来清理我的父对象和BeforeClose事件以进行父对象的预关闭验证。我的验证需要保存文档,并尝试在BeforeClose调用的方法中执行此操作。如果之前从未保存过文档,则会出现“另存为”对话框。如果用户单击“取消”,则抛出COMException,然后我就抓住了。然后出现“保存/不保存/取消”对话框。 如果用户单击“不保存”,则不会触发ShutDown事件。如果用户从“另存为”对话框保存,从第二个对话框保存,或在第二个对话框上点击取消,则一切正常

private void WordDocument_BeforeClose(object sender, System.ComponentModel.CancelEventArgs e)
{
  try
  {
    this.WordDocument.Save();
  }
  catch (System.Runtime.InteropServices.COMException a)
  {
    log.Error(a.Message);
  }
}

private void WordDocument_Shutdown(Object sender, EventArgs e)
{
  // Parent cleanup.
}

1 个答案:

答案 0 :(得分:2)

尝试使用文档关闭事件。文档here

来自'备注'部分:

  

这是卸载时在Document中调用的最后一个事件。使用此事件进行任何其他清理。

     

在文档级自定义中,当文档宿主项关闭时,程序集的应用程序域将卸载。

     

在应用程序级外接程序中,当文档主机项关闭时,应用程序域不会卸载。此外,底层文档对象不再可用。要在文档关闭之前访问该文档,请使用CloseEvent。

相关问题