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

у меня есть этот "простой" 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 — нет.


person tfl    schedule 31.03.2009    source источник


Ответы (4)


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

person Khan    schedule 21.05.2009

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

Outlook.Explorer olExplorer = this.Application.ActiveExplorer();
Outlook.Folder f = (Outlook.Folder)olExplorer.CurrentFolder;
person Vasyl    schedule 04.01.2012

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

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

person Paul-Jan    schedule 07.04.2009
comment
Explorer.CurrentFolder возвращает объект типа MAPIFolder. - person Vasyl; 04.01.2012

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

person Dmitry Streblechenko    schedule 05.01.2012