【发布时间】:2022-05-03 23:17:20
【问题描述】:
目前我正在为 GMail 联系人和 Outlook 编写一个同步工具,但是有一个小问题: 当用户删除联系人时,我的插件中需要一个事件,否则同步工具会在 Outlook 端检测到丢失的联系人,并且该工具将从谷歌端创建联系人。
我正在使用此代码从默认文件夹访问所有 Outlook 联系人:
Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = GetCurrentNamespace();
Microsoft.Office.Interop.Outlook.MAPIFolder contacts = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
IList<Microsoft.Office.Interop.Outlook.ContactItem> items = new List<Microsoft.Office.Interop.Outlook.ContactItem>();
foreach (var contact in contacts.Items)
{
items.Add(contact as Microsoft.Office.Interop.Outlook.ContactItem);
}
return items;
编辑 1: 正如 John Saunders 所说,我已经尝试订阅一个 BeforeDelete 事件,但没有成功。当我尝试在 Outlook 中删除联系人时,该事件不会被触发。
代码:
Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = GetCurrentNamespace();
_contactMapiFolder = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderContacts);
//IList<Microsoft.Office.Interop.Outlook.ContactItem> items = new List<Microsoft.Office.Interop.Outlook.ContactItem>();
this._contacts = new List<Microsoft.Office.Interop.Outlook.ContactItem>();
foreach (var contact in _contactMapiFolder.Items)
{
Outlook.ContactItem item = contact as Microsoft.Office.Interop.Outlook.ContactItem;
item.BeforeDelete += ItemOnBeforeDelete;
this._contacts.Add(item);
}
return this._contacts;
谁能给我一个例子,哪些事件可用于此类 mapi(尤其是联系人文件夹)文件夹可用以及它们是如何工作的?
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
抱歉,不知道:\
-
是的,我阅读了一些 msdn 文章和文档,但 Office 插件开发文档的文档记录不是很好
-
我正在为默认联系人文件夹搜索 ItemDeleted 或 BeforeItemDeleted,在 Microsoft.Office.Interop.Outlook.MAPIFolder 对象中没有定义任何事件。
-
是的,这就是问题所在:stackoverflow.com/questions/27508640/… 如果谷歌没有通知我用户删除了联系人,我无法在 Outlook 中删除联系人。删除一个联系人对象没问题,但是从outlook中获取一个事件就可以了。
标签: c# events add-in outlook-addin