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

Я создаю надстройку Outlook 2010 и добавил контекстное меню на ленту для idMso= "contextMenuMailItem". При щелчке я хотел бы удалить категорию, но в обработчике событий click, когда я бросаю ctl.Контекст для 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;
}

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

3 ответов


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

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

надеюсь, это помогает.


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

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

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


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

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

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

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