展望加载项项目保存

本文关键字:保存 项目 加载项 | 更新日期: 2023-09-27 18:36:30

我正在尝试编写一个插件,该插件会在保存约会时发出通知并执行一些数据。为此,我需要检查当活动检查器关闭时,该项目是否已保存。

我的问题是:当尝试将WriteEvent侦听器绑定到 FormRegionShowing -方法中的当前项目时,我需要 ActiveInspector 事件获取当前项目。但是,当将ActiveInspector获取到那里时,可能是null,因为在活动检查器实际处于活动状态之前调用了该方法。

但是,当尝试在 FormRegionClosed -方法中绑定它时,写入事件永远不会触发。那么,我如何知道用户何时实际保存AppointmentItem

编辑:我设法在FormRegionShowing方法中绑定了写入事件,但它仍然不会触发:

private void ADDIN_NAME_FormRegionShowing(object sender, System.EventArgs e){
    Outlook.AppointmentItem currentItem = (Outlook.AppointmentItem)this.OutlookItem;
    currentItem.Write += new Outlook.ItemEvents_10_WriteEventHandler(currentItem_Write);
    currentItem.AfterWrite += new Outlook.ItemEvents_10_AfterWriteEventHandler(currentItem_AfterWrite);
    MessageBox.Show("added handlers");
}
void currentItem_AfterWrite(){
    MessageBox.Show("item has been saved");
}
void currentItem_Write(ref bool Cancel){
    MessageBox.Show("item being saved");
}

展望加载项项目保存

您需要Outlook.AppointmentItem移动到类级别变量。在 COM 中,当函数超出范围时,将垃圾回收 RCW。如果要将事件与 Office 配合使用,则需要确保查看事件模型。另请参阅相关的 SO 帖子。

private Outlook.AppointmentItem currentItem; // keep events from getting GC'd
private void ADDIN_NAME_FormRegionShowing(object sender, System.EventArgs e){
    currentItem = (Outlook.AppointmentItem)this.OutlookItem;
    currentItem.Write += new Outlook.ItemEvents_10_WriteEventHandler(currentItem_Write);
    currentItem.AfterWrite += new Outlook.ItemEvents_10_AfterWriteEventHandler(currentItem_AfterWrite);
}