2

将 VSTO 2012 与 Outlook 2010 PIA(即版本 12)一起使用,我试图将回复事件挂接到消息上;但是得到一个我分配给方法组的编译错误。我在网上看到了一些使用下面的强制转换方法的其他代码,但它不会为我编译。类型库中的定义似乎缺少可能是问题的“事件”关键字,但我不清楚如何解决。

using Outlook = Microsoft.Office.Interop.Outlook;
...
void Application_ItemLoad(object Item)
    {
        if (Item is Outlook.MailItem)
        {
            Outlook.MailItem mi = Item as Outlook.MailItem;
            Outlook.MailItemClass emi = Item as Outlook.MailItemClass;
            emi +=new Microsoft.Office.Interop.Outlook.ItemEvents_10_ReplyEventHandler(MyReply);

        }
    }

    private void MyReply(object Response, ref bool Cancel)
    {
        if (Response is Outlook.MailItem)
        {
            Outlook.MailItem re = Response as Outlook.MailItem;
            //..
        }
    }

建议和帮助表示赞赏。谢谢!

4

1 回答 1

1

这就是问题:

emi +=new Microsoft.Office.Interop.Outlook.ItemEvents_10_ReplyEventHandler(MyReply);

当前,您正在尝试将事件添加到对象本身 - 而不是特定事件。您想要ItemEvents_Event_Reply事件(我怀疑),在这种情况下您需要:

emiItemEvents_Event_Reply += MyReply;

(使用简单的方法组转换而不是显式创建新的处理程序。即使您确实想使用new ...(MyReply)语法,一些选择using指令也会使您的代码更具可读性。)

编辑:好的,您可以改用该MailItem.Reply事件:

void Application_ItemLoad(object item)
{
    var mailItem = item as Outlook.MailItem;
    if (mailItem != null)
    {
        mailItem.Reply += MyReply;
    }
}
于 2013-08-05T16:25:26.403 回答