我有一个用C#编写的Microsoft Word插件。当用户尝试关闭未保存更改的文档时,将显示保存对话框。是否有一种方法可以捕获用户在保存对话框上单击取消的情况?
DocumentBeforeClose事件会在保存对话框弹出之前烦人地触发,似乎没有事件封装保存对话框事件。
为什么需要这样做: 如果用户关闭最后一个文档,我需要在我的插件工具栏上进行一些清理。但是,如果我在DocumentBeforeClose事件中进行清理,并且用户单击取消,则插件工具栏状态不正确。
编辑/更新: 正如Rob Allen建议的那样,我现在正在使用ShutDown事件来清理我的父对象和BeforeClose事件用于我的父对象的预关闭验证。我的验证需要保存文档并尝试通过BeforeClose调用的方法来完成。如果文档以前从未保存过,则会出现Save As对话框。如果用户单击取消,将抛出COMException并由我捕获。然后出现“保存/不保存/取消”对话框。如果用户单击“不保存”,则不会触发ShutDown事件。如果用户从另一个对话框中保存,或者在第二个对话框中点击取消,则所有内容都能正常运行。
DocumentBeforeClose事件会在保存对话框弹出之前烦人地触发,似乎没有事件封装保存对话框事件。
为什么需要这样做: 如果用户关闭最后一个文档,我需要在我的插件工具栏上进行一些清理。但是,如果我在DocumentBeforeClose事件中进行清理,并且用户单击取消,则插件工具栏状态不正确。
编辑/更新: 正如Rob Allen建议的那样,我现在正在使用ShutDown事件来清理我的父对象和BeforeClose事件用于我的父对象的预关闭验证。我的验证需要保存文档并尝试通过BeforeClose调用的方法来完成。如果文档以前从未保存过,则会出现Save As对话框。如果用户单击取消,将抛出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.
}