我有一个用 C# 开发的 Microsoft Word 插件。当用户尝试关闭未保存更改的文档时,会显示“保存”对话框。如果用户单击“保存”对话框上的“取消”,有没有办法捕获?
DocumentBeforeClose 事件在显示 Save 对话框之前令人讨厌地触发,并且似乎没有触发封装 Save Dialog 事件的事件。
为什么我需要这个:如果用户关闭了最后一个文档,我需要对我的加载项工具栏进行一些清理。但是,如果我在 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.
}