1

タイトルが示すように、私はイベントを引き起こしたアイテムを入手する方法を探しています。

使用できないと思われるオブジェクトItemがあるApplication_ItemLoadイベントでProperty_Changeイベントをバインドします。

Property_Changeが発生した後、関数を呼び出すためにイベントを発生させたアイテムが必要です。これを取得する方法はありますか?(ActiveExplorerを介して現在開いているアイテムを取得できることはわかっていますが、メインウィンドウでアイテムを変更するとnullになります)。

コード:ThisAddIn.cs

private Explorer _Explorer;
private List<WrapperItem> list = new List<WrapperItem>;

private void ThisAddIn_Startup(object sender, System.EventArgs e){
   _Explorer = this.Application.ActiveExplorer();
   _Explorer.SelectioNChange += _Explorer_SelectionChange;
}

void _Explorer_SelectionChange()
{
     list.Clear();
     foreach (MailItem mail in _Explorer.Selection)
     {
         list.Add(new WrapperItem(mail));
     }
 }
4

1 に答える 1

1

特定のアイテムにイベントシンクを設定していますよね?あなたのコードは何ですか?

複数のオブジェクトからのイベントを追跡している場合、経験則では、イベントを発生させるオブジェクトへのポインターを含む独自のラッパークラスを作成し、同じラッパークラスにイベントハンドラーを実装します。このようにして、イベントが発生したときに、どのオブジェクトがそれを発生させたかがわかります。

サンプルラッパー(頭のてっぺんから)は次のようになります

public class MailItemWrapper
{
  public MailItem item;
  public MailItemWrapper(MailItem OutlookItem)
  {
    item = OutlookItem;
    item.PropertyChange += new System.EventHandler(PropertyChangeHandler);
  }
  private PropertyChangeHandler(string Name)
  {
    MessageBox.Show(string.Format("Property named {0} changed on item {1}", name, item.Subject))
  }
}
于 2013-03-08T18:00:29.143 に答える