Как создать объект Outlook.Folder из Outlook.Application.ActiveExplorer.CurrentFolder - PullRequest
1 голос
/ 31 марта 2009

У меня есть этот «простой» объект Outlook:

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 не равен

Ответы [ 4 ]

1 голос
/ 21 мая 2009

Я не нашел легкий путь. Вы можете найти 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 и считайте равным или меньшим, чтобы получить все ваши папки.

1 голос
/ 04 января 2012

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

Outlook.Explorer olExplorer = this.Application.ActiveExplorer();
Outlook.Folder f = (Outlook.Folder)olExplorer.CurrentFolder;
0 голосов
/ 05 января 2012

Outlook.Folder совпадает с Outlook.MAPIFolder.

0 голосов
/ 07 апреля 2009

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

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

...