2015-11-20 43 views
0

从几天我就与BeforeClose事件打架。问题是我打开更多文档的时候。例如: 我开了4页新的文件,在新建文档事件武官BeforeClose事件的每一个文档到文档这样的:C#单词AddIn BeforeClose事件消失

var vstoDoc = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); 
vstoDoc.BeforeClose += new System.ComponentModel.CancelEventHandler(ThisDocument_BeforeClose); 

现在我试图关闭它,所以我以后文档2关闭文档4和现在是问题,因为Doc1仍然有BeforeClose事件,但Doc3没有。所以,如果我从上次开始关闭文件降序,它工作正常。但是,如果我关闭例如Doc1作为第一个其余没有BeforeClose事件。我不知道发生了什么事。

回答

0

我不确定它为什么会这样做,但我从来没有在文档中看到可以使用GetVstoObject将事件附加到文档。它可能需要为每个文档重新使用相同的对象(vstoDoc),而不是将每个对象分配给一个单独的对象。如果你创建了一个类来生成这些对象,然后将它们保存在一个集合中,它可能会更好。但是

我的建议是使用适用于您的VSTO应用程序级加载项的应用程序级DocumentBeforeClose事件。对于加载项运行时关闭的所有文档,这将自动触发。如果您想追踪特定的文档,可以在创建(NewDocument)或打开(DocumentOpen)时向它们添加自定义文档属性或DocumentVariable,以便检查何时触发DocumentBeforeClose。

+0

this.Application.DocumentBeforeClose + = new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(ApplicationDocumentBeforeClose); 解决这一切 –