Почему моя надстройка VSTO Outlook запускается дважды? - PullRequest
1 голос
/ 22 июня 2011

У меня есть надстройка VSTO Outlook 2007, которая загружается при запуске. Когда он загружается, он выполняет следующее:

    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

Когда электронное письмо отправлено, приложение работает нормально. Но когда я нажимаю на кнопку, надстройка срабатывает 2 раза, а когда я использую контекстное меню, она срабатывает 2 раза.

Есть идеи, почему это может быть?

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Я столкнулся с подобной проблемой с моим плагином outlook с C #. Я считаю, что когда я компилирую код и отлаживаю его, плагин регистрируется в Outlook из моего каталога dev. И затем, когда я запускаю установку, она снова регистрируется, поэтому, когда я открываю Outlook, действия запускаются в 2 раза. Мне пришлось вручную пойти и удалить загруженный плагин из моего каталога dev.

Надеюсь, это поможет

1 голос
/ 22 июня 2011

Я не совсем уверен в этом, но выглядит, как будто вы опускаете событие ContextMenuDisplay и событие CommandBarDisplay, а затем создаете кнопку и опускаете событие щелчка КАЖДОЕ ВРЕМЯ, запускается событие ContextMenuDisplay или событие CommandBarDisplay, что означаетВы можете перехватить событие нажатия кнопки любое количество раз, что приведет к тому, что дескриптор события будет вызываться при нажатии более одного раза.Я не верю, что контекстное меню или панель команд разрушаются и перестраиваются при каждом запуске события.

Я думаю, вы захотите создать кнопку и обработать ее события только один раз, проверяя, существует ли кнопка ужеи если это произойдет, просто ничего не делайте.

Но прошло много времени с тех пор, как я копался в хитросплетениях обработки событий outlook ...

...