2015-11-20 69 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); 解決這一切 –