2014-04-01 37 views
2

在我的加載項中,我需要爲每個打開的文檔創建一個任務窗格。在外接的啓動方法,我訂閱ApplicationEvents4_Event.NewDocument和Application.DocumentOpen事件,然後爲每個打開的文檔任務窗格:VSTO Word加載項 - 如果從可執行文件啓動Word,則新文檔事件不會觸發

((ApplicationEvents4_Event)Application).NewDocument += CreateTaskPaneWrapper; 
Application.DocumentOpen += CreateTaskPaneWrapper; 

foreach (Document document in Application.Documents) 
{ 
    CreateTaskPaneWrapper(document); 
} 

這包括通過Word的打開或創建文檔的情況下菜單或打開OS中的現有文檔文件。但是,如果Word已打開,啓動WINWORD.EXE(或通過快捷方式訪問它,這是一種非常常見的情況)不會觸發任何事件,儘管有一個打開新文檔的新窗口。我如何對這種情況做出反應併爲以這種方式創建的文檔創建一個任務窗格?我正在使用針對Word 2007的VSTO 3和Visual Studio 2008.

+0

我正在努力與非常相似的東西。你有可能展示一些你用來訂閱ApplicationEvents4Events處理程序的附加代碼嗎? –

+0

@StevenDAmico我在這裏拋棄了一些代碼:http://pastebin.com/CRZmpBg5。我刪除了一些特定於產品的代碼,並且這些註釋被急匆匆地翻譯成英文,但否則它是完整的。代碼來自兩個不同的文件。我一直無法找到這個問題的適當解決方案,所以在我的插件中,如果用戶單擊插件功能區按鈕,將會創建缺失的任務窗格。此外,請檢查我的另一個問題在任務窗格主題:http://stackoverflow.com/questions/22560441 – sdds

回答

2

所以我在我的解決方案中解決了這個問題,雖然我不確定它會交叉適用。可悲的是,我的是在VB.Net,所以可能需要一些翻譯。

首先,我結束了不使用ApplicationEvents4_Event而是有其他建於事件觸發,你可以通過「的ThisAddIn」

Private Sub Application_NewDocument(ByVal Doc As Word.Document) Handles Application.NewDocument 
     'MsgBox("I opened something") 
     myCustomTaskPane = Me.CustomTaskPanes.Add(New MyCustomTaskPaneClass, "TaskPane", Doc.ActiveWindow) 
     myCustomTaskPane.Visible = True 
    End Sub 

使用使用這種方法我也有類似的挑戰。運行winword.exe,從而打開一個新的word文檔,不會觸發NewDocument事件。幸運的是,還有另一個事件要使用 - 文檔更改。

Private Sub Application_DocumentChange() Handles Application.DocumentChange 
    'function to test if the ActiveDocument has a taskpane from my add-in, and then a function to add one   
    If Not HasMyCustomTaskPane() then AddCustomTaskPane() 
End Sub 

所以 - 底線,無論您是否繼續使用ApplicationEvents4_Event,您應該看看您是否可以使用DocumentChange事件。它會在選擇新的單詞窗口時觸發。

+0

謝謝。我最終完全拋棄了ApplicationEvents4_Event.NewDocument和Application.DocumentOpen,而是使用了Application_DocumentChange。在使用Application.DocumentOpen時,檢查活動文檔是否存在任務窗格,無論如何,在某些情況下,這會打開已打開的文檔。 – sdds

1

如果啓動Word,則會在加載項加載之前創建一個新文檔,因此無法捕獲此事件。

如果您需要使用最初創建的文檔,只需查看Documents集合 - 如果Count大於零,則此文檔是在加載加載項之前由Word創建的文檔。

1

由於Word如何加載和重新使用打開的窗口,處理Word中多個窗口的任務窗格相當複雜。要正確執行此操作,您必須考慮不同的操作:

  • 用戶採取措施顯示或隱藏任務窗格。
  • 用戶創建一個新文檔。
  • 用戶打開現有文檔。
  • 用戶關閉打開的文檔。

有一個探索所有的細節的教程,無論是在VB和C#:https://msdn.microsoft.com/en-us/library/bb264456%28v=office.12%29.aspx

我還發現了一個similar answer on SO

相關問題