1

正如标题所示,我正在寻找一种方法来获取触发事件的 Item。

我在 Application_ItemLoad 事件中绑定 Property_Change 事件,其中我有一个似乎无法使用的对象 Item。

触发 Property_Change 后,我需要触发事件的 Item 才能调用我的函数。有没有办法得到这个?(我知道我可以通过 ActiveExplorer 获取当前打开的项目,但是如果在主窗口中修改了项目,我会得到空值)。

代码: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 回答