如何从Outlook功能区上下文菜单中获取当前邮件项目

Kei*_*ith 13 c# vsto outlook-addin

我正在创建一个Outlook 2010加载项,并为我的功能区添加了一个上下文菜单,用于idMso ="contextMenuMailItem".点击,我想删除一个类别,但在click事件处理程序中,当我将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;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这里发生了什么?谢谢!

小智 13

以下链接可能会为您提供一些见解:

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

控件的"上下文"为您提供了自定义的相应Outlook对象(例如Inspector对象).从那里你需要引用上下文对象的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;
}
Run Code Online (Sandbox Code Playgroud)

希望,这有帮助.

  • 这在阅读窗格中不起作用b/c上下文是Selection的实例.但是你让我走上正轨,谢谢! (2认同)

Aam*_*mol 8

从所选邮件项目的上下文菜单中点击事件后,您可以检索邮件项目 -

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;
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多详情,请访问这里.