Подтвердить что ты не робот

Как получить текущий элемент почты из контекстного меню ленты в ленте Outlook

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

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;
}

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

4b9b3361

Ответ 1

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

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

"Контекст" элемента управления предоставляет вам соответствующий объект Outlook, который вы настраиваете (например, объект Inspector). Оттуда вам понадобится ссылка на объект CurrentItem объекта context, чтобы получить 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;
}

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

Ответ 2

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

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;
                }
        }
}

Подробнее см. здесь.

Ответ 3

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

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

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

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