ThisDocument_BeforeSave包含多个word文档

时间:2015-07-06 12:18:20

标签: events ms-word save vsto handler

我在保存到Application Document Change事件处理程序中的Word插件之前添加了一个文档:

    private void Application_DocumentChange()
    {
        Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
        vstoDocument.BeforeSave += ThisDocument_BeforeSave;
    }

我在文档更改中包含了Before save事件处理程序,希望它可以应用于打开的每个word文档。

当只打开一个word文档时,这非常有效。但是,当打开第二个文档然后关闭第一个文档时,该操作不会在保存时触发。

但是,只要第一个文档保持打开状态,保存操作就会很好地触发所有其他文档。

基本上,似乎事件处理程序似乎只应用于第一个打开的文档,并在该文档关闭时停止工作。

干杯

1 个答案:

答案 0 :(得分:0)

您需要在全局声明源对象,以防止它被垃圾收集器(GC)滑动。当GC收集堆时,您的源对象可以被销毁,并且您根本不会获得任何事件。

Microsoft.Office.Tools.Word.Document vstoDocument = null;

private void Application_DocumentChange()
{
    vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    vstoDocument.BeforeSave += ThisDocument_BeforeSave;
}