gpt4 book ai didi

c# - Outlook 加载项保存

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:12 26 4
gpt4 key购买 nike

我正在尝试编写一个插件,它会在保存约会时发出通知并处理一些数据。为此,我需要检查在关闭事件检查器时是否保存了该项目。

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

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

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

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 中使用事件,你需要确保 review the eventing model .另见 related SO post .

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

关于c# - Outlook 加载项保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com