2

Возможно ли получить доступ к ActiveInspector во время загрузки ленты. Application.ActiveInspector() возвращает правильное значение при использовании пользовательской формы, но не для контактной формы по умолчанию.Application.ActiveInspector() является нулевым при загрузке ленты Outlook

Мне нужен ActiveInspector для настройки кнопки ленты в зависимости от значения свойства в ActiveInspector(). CurrentItem.

ответ

0

Можете ли вы обработать событие NewInspector коллекции Inspectors, а затем удерживать его в статическом поле (возможно, следует использовать WeakReference), доступ к которому вы можете получить из события загрузки ленты?

У меня не было настройки ленты с Outlook, но я много работал с инспекторами в своем старом продукте Tablet PC, TEO. Они - боль в заднице, чтобы работать, но главное, что вы не хотите делать, слишком долго висеть на ссылке Inspector, потому что вы получите всевозможные странные проблемы с выключением Outlook или отменой ожидающих изменений.

1

Я немного отклоняюсь от приведенного выше, поскольку я поддерживаю список открытых инспекторов (я завершаю инспектор и сохраняю это в списке). Добавление их в новое событие инспектора и удаление их при закрытом закрытом закрытии.

В моем ленточном коде у меня есть статический метод FindOutlookInspector, который находит инспектора, используя control.context ленты.

Что-то вдоль этих линий ..

OutlookInspector мой обернутый класс инспектор, но вы не можете что и т.д. Кроме того, я забочусь только о отправлений

void _inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) { 
    OutlookItem olItem = null; 
    try { 
     object newitem = Inspector.CurrentItem; 
     olItem = new OutlookItem(newitem); 
     if (olItem.Class == Outlook.OlObjectClass.olMail && olItem.MessageClass == "IPM.Note") { 

      OutlookInspector existingWindow = FindOutlookInspector(Inspector); 

      if (existingWindow == null) { 
       OutlookInspector window = new OutlookInspector(Inspector); 

       window.Close += new EventHandler(WrappedWindow_Close); 
       _windows.Add(window); 
      } 

     } catch (Exception ex) { 
      throw ex; 
     } 
    } 

    void WrappedWindow_Close(object sender, EventArgs e) { 
     OutlookInspector window = (OutlookInspector) sender; 
     window.Close -= WrappedWindow_Close; 
     _windows.Remove(window); 
    } 

    internal static OutlookInspector FindOutlookInspector(object window) { 
     foreach(OutlookInspector inspector in _windows) { 
      if (inspector.Window == window) { 
       return inspector; 
      } 
     } 
     return null; 
    } 

Затем в коде ленты смогу звоните FindOutlookInspector получить обернутой инспектору

OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context); 
+0

@ 76mel Убедитесь, что явно способствовал снижению COM-ссылки пункта о bjects. YMMV. – 2009-11-12 17:54:10