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 に答える