我最近为客户端编写了一个Outlook插件(用于Outlook 2010),该客户端将用户的Outlook数据库与第三方应用程序同步。这很好用。但是,客户端要做的一件事是利用标准的复制/粘贴功能来复制Outlook中的记录。问题是我为已发送到第三方系统的任何Outlook记录定义了UserProperty(它存储来自第三方系统的内部ID)。当客户端执行复制/粘贴时,也会复制此UserProperty(这是错误的,因为它创建具有相同第三方ID的多个记录)。我想知道是否有某种方法来检测通过代码发生复制/粘贴,并在保存之前对记录进行修改(删除此UserProperty)。由于他们可能会在任务,约会或联系人中执行此操作,因此我需要全面适用的指导。
根据以下建议,我尝试利用BeforeItemPaste,如下所示:
private void ThisAddIn_Startup(object sender, System.EventArgs e) {
Globals.ThisAddIn.Application.ActiveExplorer().BeforeItemPaste += new Outlook.ExplorerEvents_10_BeforeItemPasteEventHandler(Item_BeforeItemPaste);
}
private void Item_BeforeItemPaste(ref System.Object ClipboardContent,
Microsoft.Office.Interop.Outlook.MAPIFolder Target, ref bool Cancel) {
System.Windows.Forms.MessageBox.Show("Trying to paste");
}
第一次复制/粘贴时会出现该消息,然后再也不会出现。我尝试利用Application.Explorers,理论上让我可以访问Outlook中的所有探险者,但这并没有让我访问我正在寻找的个人(约会,任务,联系人)(只有一个元素在那里调试时的'array')。此外,我尝试通过调用MAPIFolder.GetExplorer来访问这些特定的资源管理器项,但这总是返回null。
答案 0 :(得分:1)
尝试使用Explorer.BeforeItemPaste事件。