1

我有一个使用 Visual Studio 2010 用 C# 编写的 Outlook 2010 加载项项目。

由于加载项在 Outlook 2013 中总体上工作,我只想进行轻微修改,以防止 Outlook 2013 中新的 InlineResponse 功能出现问题。

我想在不升级到 VS 2012 的情况下为 InlineResponse 事件注册一个事件处理程序(因为已删除安装程序项目)。我阅读了有关使用反射来获取新事件的信息。

我没有收到任何异常,但该事件不会触发我的处理程序(未调用 OnInlineResponse)。

public partial class ThisAddIn
{
   Outlook.Explorer _explorer;

   private void ThisAddIn_Startup(object sender, System.EventArgs e)
   {
       _explorer = Application.ActiveExplorer();

       AddInlineResponseHandler();
   }

   private void AddInlineResponseHandler()
   {
      var einfo = _explorer.GetType().GetEvent("InlineResponse", BindingFlags.Public | BindingFlags.Instance);

      if (einfo != null)
      {
         var handler = Delegate.CreateDelegate(einfo.EventHandlerType, this, this.GetType().GetMethod("OnInlineResponse", BindingFlags.NonPublic | BindingFlags.Instance), false);

         einfo.AddEventHandler(_explorer, handler);
      }

   }

   private void OnInlineResponse()
   {
      System.Windows.Forms.MessageBox.Show("InlineResponse");
   }
}

有什么建议我可以实现所需的行为吗?

4

1 回答 1

1

Gavin Smyth(他写了上面提到的关于使用反射的帖子)非常友好地回答了我们实现之间的差异:

从加文史密斯

我能在你和我之间发现的唯一区别是 OnInlineResponse 接受一个参数,即新创建的邮件项目 - 请参阅http://msdn.microsoft.com/en-us/library/office/jj229061 - 即,我的方法已定义作为:

private void OnInlineResponse(object item)
{
  ...
}
于 2013-05-03T13:07:32.517 回答