展望加载项项目保存
本文关键字:保存 项目 加载项 | 更新日期: 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);
}