Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性更改事件后Outlook加载项获取项目_C#_Outlook_Outlook Addin_Outlook 2007 - Fatal编程技术网

C# 属性更改事件后Outlook加载项获取项目

C# 属性更改事件后Outlook加载项获取项目,c#,outlook,outlook-addin,outlook-2007,C#,Outlook,Outlook Addin,Outlook 2007,正如标题所示,我正在寻找一种方法来获取触发事件的项目 我在应用程序_ItemLoad事件中绑定属性_Change事件,在该事件中我有一个似乎无法使用的对象项 触发属性更改后,我需要触发事件的项才能调用我的函数。有办法得到这个吗?(我知道我可以通过ActiveExplorer获取当前打开的项目,但是如果在主窗口中修改了这些项目,我会得到null) 代码: 这是ADDIN.cs private Explorer _Explorer; private List<WrapperItem> l

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

我在应用程序_ItemLoad事件中绑定属性_Change事件,在该事件中我有一个似乎无法使用的对象项

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

代码: 这是ADDIN.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));
     }
 }
private Explorer\u Explorer;
私有列表=新列表;
私有void ThisAddIn_启动(对象发送方,System.EventArgs e){
_Explorer=this.Application.ActiveExplorer();
_Explorer.SelectioNChange+=\u Explorer\u SelectioNChange;
}
void\u Explorer\u SelectionChange()
{
list.Clear();
foreach(浏览器中的邮件项目邮件选择)
{
添加(新包装项目(邮件));
}
}

您正在为特定项目设置事件接收器,对吗?你的代码是什么

如果要跟踪来自多个对象的事件,经验法则是创建自己的包装器类,该类将包含指向引发事件的对象的指针,并在同一包装器类中实现事件处理程序。这样,当事件激发时,您将知道是哪个对象引发了它

一个样本包装(从我头顶上取下)看起来像

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

您正在为特定项目设置事件接收器,对吗?你的代码是什么

如果要跟踪来自多个对象的事件,经验法则是创建自己的包装器类,该类将包含指向引发事件的对象的指针,并在同一包装器类中实现事件处理程序。这样,当事件激发时,您将知道是哪个对象引发了它

一个样本包装(从我头顶上取下)看起来像

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

听起来很合理,你能提供一个关于如何在这个特定事件中使用包装类的示例或链接吗?(Im当前将它们绑定到folders.items.propertchange上。此外,永远不要在文件夹中的所有项目上设置事件接收器-您将杀死您的系统。可以使用MAPIFolder.items事件,也可以仅在Application.ActiveExplorer.Selection集合中的项目上设置事件接收器。当Explorer.SelectionChange事件激发和ad时,清除旧项目d浏览器中的项目。选择跟踪的项目列表。这是一个MAPIFolder.items.PropertyChange事件。这不正确吗?谢谢,但我知道包装的外观,如何将此包装应用于文件夹项目?为需要跟踪的每个项目创建一个包装。如上所述,循环浏览Explorer.S中的所有项目选择,为每个项目创建包装,添加到列表中。当触发Explorer.SelectionChange事件时,清除列表并使用此.Application.ActiveExplorer()添加Explorer.Selection.im的新内容.SelectionChange+=此Addin_SelectionChange;但此事件仅在我站在邮件项目中时才会引发,如果我移动到其他合理的位置,您能否提供一个示例或链接,说明如何在此特定事件中使用包装器类?(Im当前将它们绑定到folders.items.propertchange上。此外,永远不要在文件夹中的所有项目上设置事件接收器-您将杀死您的系统。可以使用MAPIFolder.items事件,也可以仅在Application.ActiveExplorer.Selection集合中的项目上设置事件接收器。当Explorer.SelectionChange事件激发和ad时,清除旧项目d浏览器中的项目。选择跟踪的项目列表。这是一个MAPIFolder.items.PropertyChange事件。这不正确吗?谢谢,但我知道包装的外观,如何将此包装应用于文件夹项目?为需要跟踪的每个项目创建一个包装。如上所述,循环浏览Explorer.S中的所有项目选择,为每个项目创建包装,添加到列表中。当Explorer.SelectionChange事件激发时,清除列表并添加Explorer.Selection.im的新内容,使用此.Application.ActiveExplorer().SelectionChange+=此Addin_SelectionChange;但如果我移动到其他任何位置,则仅当我站在邮件项目中时才会引发此事件