VSTO-Custom任务面板如何获取当前邮件项

VSTO-Custom Task Pane how to get current MailItem

我想找到一些方法让自定义任务窗格获得当前检查器。我应该使用什么方法?

我按照以下 Link 构建了一个 VSTO Outlook C# 添加: Walkthrough: Display custom task panes with email messages in Outlook

我在任务窗格中插入了一个按钮。 现在我想使用此按钮通过操作 Button_Click

插入邮件标题,如 "test for button"

我尝试使用Outlook.Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();

Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;

获得现任检查员,但似乎行不通。

下面是我的代码:

private void InsertButton_Click(object sender, EventArgs e)
        {
            Outlook.Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();
            if (inspector is Outlook.MailItem)
            {
                public Outlook.MailItem mailItem;
                mailItem = inspector as Outlook.MailItem;
                mailItem.subject = "test for button";                
            }                               
        }

我也试过这种方法:

private void InsertButton_Click(object sender, EventArgs e)
        {
            Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
            mailItem.subject = "test for button";
        }

第一个代码if判断为false。而第二个代码 mailItem=null;

但我期望的输出是 mailItem 等于任务窗格所在的当前项目。

第一个代码示例是错误的 - "if (inspector is Outlook.MailItem)" 始终为 false,因为 inspector 是一个 Inspector 对象,而不是 MailItem 对象。

对于第二个示例,请显示您的所有代码 - 您似乎有 class 级别的 Inspector 属性,但不清楚它是如何设置的。 Globals.ThisAddIn.Application.ActiveInspector().CurrentItem 应该适用于 return MailItem 对象,如果它是一封电子邮件而不是另一种类型的项目(您当然应该始终进行类型检查)。

John Hart@GitHub 回答了我的问题。 下面是他的代码:

private void Button1_Click(object sender, EventArgs e)
    {
        Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();
        MailItem mailItem = inspector.CurrentItem as MailItem;
        mailItem.Subject = "test for button";
    }

原始答案参见 GitHub 上的问题: VSTO Outlook-Task Pane get Current MailItem