VSTO-自定义任务窗格如何获取当前MailItem

时间:2019-04-02 03:14:59

标签: c# vsto outlook-addin

我想找到让自定义任务窗格获取当前检查器的方法。我应该使用哪种方法?

我通过遵循以下链接构建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的判断是错误的。第二个代码mailItem=null;

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

2 个答案:

答案 0 :(得分:0)

第一个代码示例是错误的-“如果(检查器是Outlook.MailItem),则始终为false,因为检查器是检查器对象,而不是MailItem对象。

对于第二个示例,请显示所有代码-您似乎具有类级别的Inspector属性,但不清楚如何设置。 Globals.ThisAddIn.Application.ActiveInspector()。CurrentItem应该可以返回MailItem对象,前提是它是电子邮件而不是其他类型的项目(当然,您应该始终进行类型检查)。

答案 1 :(得分:0)

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