Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как создать объект Outlook.Folder из Outlook.Application.ActiveExplorer.CurrentFolder

Автор вопроса: tflОтветов: 4

у меня есть этот "простой" Outlook-Object:

Outlook.Explorer olExplorer = this.Application.ActiveExplorer();

в "ThisAddin_StartUp" я регистрирую событие olExplorer.FolderSwitch в функции olExplorer_FolderSwitch(). Там я должен создать объект Outlook-Folder из текущей папки:

Outlook.Folder f = olExplorer.CurrentFolder as Outlook.Folder;

Но: свойство "CurrentFolder" имеет тип MAPIFolder и не может использоваться как Outlook.Folder. Как я могу "перевести" CurrentFolder-Property в Outlook.Folder? - без потери обработчика событий? Если я сделаю это простое преобразование, объект f не вызовет событие BeforeItemMove, потому что f имеет значение NULL, а olExplorer.CurrentFolder - нет.

outlookvstomapi

Ответы

Ответ 1 · рейтинг 1 · Khan

Я не нашел легкого пути. Вы можете найти Outlook.Folder из сеансов папок.

Если вы сравните EntryID, вы получите правильную папку.

Outlook.Folders olFolders = OutlookApp.Session.Folders;

for (int i = 1; i <= olFolders.Count; i++)
{
   if (olFolders[i].EntryID == olExplorer.CurrentFolder.EntryID)
   {
      // folder found assign and use it.
   }
}

обратите внимание на начало с 1 и считайте равным или меньшим, чтобы получить все ваши папки.

Ответ 2 · рейтинг 1 · Vasyl

Есть простой способ конвертировать MAPIFolder в Outlook.Folder, попробуйте явное приведение:

Outlook.Explorer olExplorer = this.Application.ActiveExplorer();
Outlook.Folder f = (Outlook.Folder)olExplorer.CurrentFolder;

Ответ 3 · Paul-Jan

Я действительно не понимаю проблему, так как согласно документации Explorer.CurrentFolder возвращает объект типа Outlook.Folder, а не MAPIFolder. Лично я не занимался разработкой VSTO (или специфической для 2007 года), но вы уверены, что не смешиваете разные версии объектной модели?

В любом случае, Outlook.Folder и MAPIFolder совместно используют свойства EntryID и StoreID. Вы можете использовать их для поиска соответствующей папки Outlook.Folder с помощью NameSpace.GetFolderFromID. Рассматриваемое пространство имен получается через Application.GetNamespace("MAPI").

Ответ 4 · Dmitry Streblechenko

Outlook.Folder аналогичен Outlook.MAPIFolder.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы