得到";无法分配给';回复';因为在outlook外接程序中添加事件时方法组

本文关键字:程序 添加 方法 事件 因为 quot 分配 得到 回复 outlook | 更新日期: 2023-09-27 18:26:33

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

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

感谢您的建议和帮助。谢谢

得到";无法分配给';回复';因为在outlook外接程序中添加事件时方法组

这就是问题所在:

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