2

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

我需要 ActiveInspector 来根据 ActiveInspector().CurrentItem 中的属性值自定义功能区按钮。

4

2 回答 2

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);
于 2009-05-28T09:41:38.647 回答
0

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

我没有使用 Outlook 进行任何功能区自定义,但我已经在我的旧 Tablet PC 产品 TEO 中与检查员进行了大量工作。使用它们很麻烦,但您不想做的主要事情是长时间挂在 Inspector 参考上,因为关闭 Outlook 或取消挂起的编辑会遇到各种奇怪的问题。

于 2009-05-28T06:40:37.577 回答