Надстройка C # для Outlook - удаление контекстного меню

Мы настраиваем настраиваемое контекстное меню, когда вы щелкаете правой кнопкой мыши электронное письмо в Outlook, например:

        private void _application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Interop.Selection Selection)
        {
                var contextButton = (Office.CommandBarButton)CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, Temporary: true);
                contextButton.Visible = true;
                contextButton.Caption = "&My Context Menu";
                contextButton.Click += MyContextMenu_Click;
        }

Этот метод подписан на Application.ItemContextMenuDisplay.

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

Тогда это заставляет меня задуматься, когда лучше всего очистить мой временный пункт контекстного меню? Мне нужно где-то отписаться от события C #. Где это предполагаемое место? (Я также думаю, что нам может потребоваться позвонить Marshal.ReleaseComObject)

Мы используем VSTO и шаблон проекта Outlook 2010 в Visual Studio. Я не нашел много хороших примеров настройки контекстного меню в целом.


person jonathanpeppers    schedule 07.09.2011    source источник


Ответы (1)


Возможно, именно эта причуда является причиной того, что в Outlook 2010 Microsoft больше движется к XML-контексту ленты. настройки меню в пользу стиля CommandBars в стиле Outlook 2007. См. соответствующую публикацию SO.

Что касается очистки ресурсов, используемых CommandBars, вам необходимо прикрепить к _ 3_, чтобы освободить ресурсы и отказаться от подписки на слушателя. См. соответствующую публикацию SO об удалении контекстных меню Outlook.

Вам следует провести рефакторинг своего кода, чтобы использовать новый интерфейс XML ленты, чтобы избежать CommandBars.

person SliverNinja - MSFT    schedule 19.04.2012
comment
Мы обнаружили, что это событие не было запущено должным образом (я думаю, потому что это меню контакта или адрес электронной почты в списке). Я больше не работаю над этой проблемой - мы очистили старое меню в начале ItemContextMenuDisplay. Это отлично сработало для нас. - person jonathanpeppers; 19.04.2012