Outlook功能区加载时Application.ActiveInspector()为空

时间:2009-05-28 06:35:50

标签: outlook ms-office outlook-2007 outlook-addin outlook-object-model

是否可以在功能区加载时访问ActiveInspector。当我使用自定义表单时,Application.ActiveInspector()返回正确的值,但不是默认的联系表单。

我需要ActiveInspector来自定义功能区按钮,具体取决于ActiveInspector()中的属性值.CurrentItem。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您是否可以处理Inspectors集合的NewInspector事件,然后在可以从功能区加载事件中访问的静态字段(可能应该使用WeakReference)中保留它?

我没有使用Outlook进行任何功能区自定义,但我已经在我的旧平板电脑产品TEO中与检查员进行了大量工作。他们在工作中很痛苦,但是你不想做的主要事情是挂起Inspector参考太久,因为你会因关闭Outlook或取消待处理的编辑而遇到各种奇怪的问题。