Application.ActiveInspector () имеет нулевое значение при загрузке ленты Outlook - PullRequest
2 голосов
/ 28 мая 2009

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

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

Ответы [ 2 ]

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

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

В моем коде ленты у меня есть статический метод 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 голосов
/ 28 мая 2009

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

Я не выполнял никаких настроек ленты в Outlook, но я проделал большую работу с инспекторами в моем старом продукте для планшетных ПК, TEO. С ними тяжело работать, но главное, чего ты не хочешь, - это слишком долго держаться ссылки на Инспектора, потому что у тебя будут всевозможные странные проблемы с закрытием Outlook или отменой отложенных изменений. *

...