2011-06-22 103 views
1

我有一個啓動時加載的VSTO Outlook 2007插件。當它加載它的follwing:爲什麼我的VSTO Outlook加載項啓動兩次?

Private Sub ThisAddIn_Startup() Handles Me.Startup 
     explorer = Me.Application.ActiveExplorer() 
     AddHandler Application.ItemContextMenuDisplay, AddressOf Application_ItemContextMenuDisplay 
     AddHandler Application.Startup, AddressOf Application_CommandBarMenuDisplay 
    End Sub 

然後這個AddHandlers後執行以下操作:

Sub Application_CommandBarMenuDisplay() 

      Dim cBar As Office.CommandBar = explorer.CommandBars("Standard") 
      btnCommandBarMenu = CType(cBar.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, True), Office.CommandBarButton) 

      With btnCommandBarMenu 
       .BeginGroup = True 
       .Style = MsoButtonStyle.msoButtonIconAndCaption 
       .Caption = "File TNRP Email" 
       .Tag = "File TNRP Email" 
       .Picture = IPictureDisp.FromImage(My.Resources.label16) 
       .Mask = IPictureDisp.MaskFromImage(My.Resources.label16) 
      End With 

      AddHandler btnCommandBarMenu.Click, AddressOf btn_CommandBarMenuClick 

    End Sub 

Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Microsoft.Office.Core.CommandBar, ByVal Selection As Microsoft.Office.Interop.Outlook.Selection) 

      btnContextMenu = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, True) 

      With btnContextMenu 
       .BeginGroup = True 
       .Visible = True 
       .Style = MsoButtonStyle.msoButtonIconAndCaption 
       .Caption = "File TNRP Email" 
       .Tag = "File TNRP Email" 
       .Picture = IPictureDisp.FromImage(My.Resources.label16) 
       .Mask = IPictureDisp.MaskFromImage(My.Resources.label16) 
      End With 

      AddHandler btnContextMenu.Click, AddressOf btn_ContextMenuClick 

End Sub 

當發送電子郵件的應用程序工作正常。但是,當我點擊按鈕時,添加火焰發生兩次,當我使用上下文菜單時,它也會發射兩次。

任何想法,爲什麼這可能是?

回答

1

我不完全確定這一點,但它看起來像你沉沒的ContextMenuDisplay事件和CommandBarDisplay事件,然後創建一個按鈕,並沉沒它的單擊事件每次的ContextMenuDisplay事件或CommandBarDisplay事件觸發,這意味着您可能會多次鉤住按鈕單擊事件,這會導致事件句柄不止一次被點擊。我不相信每次事件觸發時,Contextmenu或命令欄都會被銷燬和重建。

我想你會想要創建按鈕,並只沉沒它的事件一次,測試按鈕是否已經存在,如果它確實,什麼也不做。

但它已經有一段時間,因爲我已經挖成前景事件處理的vagueries ...

0

我遇到類似的問題,我用C#的Outlook插件。我相信當我編譯代碼並進行調試時,插件會從我的開發目錄中用Outlook註冊。然後當我通過設置運行時,它會再次註冊,所以當我打開Outlook操作時會被激活2倍。我不得不手動去掉從我的開發目錄中加載的插件。

希望這會有所幫助

相關問題