Как получить текущий элемент почты из контекстного меню ленты Outlook - PullRequest
13 голосов
/ 29 июля 2011

Я создаю надстройку Outlook 2010 и добавил на ленту контекстное меню для idMso = "contextMenuMailItem".При нажатии я хотел бы удалить категорию, но в обработчике событий щелчка, когда я приводил ctl.Context к MailItem, он всегда равен нулю.

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl)
{
    MailItem item = ctl.Context as MailItem; //Always null
    if (item != null)
        return (item != null && HasMyCategory(item));
    else
        return false;
}

Кто-нибудь знает, что здесь происходит?Спасибо!

Ответы [ 3 ]

13 голосов
/ 29 июля 2011

Следующая ссылка может дать вам некоторое представление:

http://msdn.microsoft.com/en-us/library/ff863278.aspx

«Контекст» элемента управления дает вам соответствующий объект Outlook, который вы настраиваете (например, Инспекторобъект).Оттуда вам нужно обратиться к свойству CurrentItem объекта контекста, чтобы получить MailItem.

Например,

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl)
{
    var item = ctl.Context as Inspector;
    var mailItem = item.CurrentItem as MailItem;
    if (item != null)
        return (item != null && HasMyCategory(item));
    else
        return false;
}

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

8 голосов
/ 31 июля 2015

Вы можете получить Почтовый элемент после события клика, запущенного из контекстного меню из выбранного почтового элемента -

public bool btnRemoveCategory_IsVisible(Office.IRibbonControl ctl)
{
        Explorer explorer = Globals.ThisAddIn.app.ActiveExplorer();
            if (explorer != null && explorer.Selection != null && explorer.Selection.Count > 0)
            {
                object item = explorer.Selection[1];
                if (item is MailItem)
                {
                    MailItem mailItem = item as MailItem;
                }
        }
}

Для получения более подробной информации посетите здесь .

4 голосов
/ 15 ноября 2011

Я использую это, когда не могу понять, что такое динамический объект ComObject.

Добавить ссылку на Microsoft.VisualBasic

private void whatType(object obj)
{           
  System.Diagnostics.Debug.WriteLine(Microsoft.VisualBasic.Information.TypeName(obj));
}

Просто он нужен почти для того же, что иВы, мой IRibbonControl.Context, на самом деле тоже был Selection, хотя это был только один выбранный элемент.

...