是否可以在加载色带时访问 ActiveInspector。Application.ActiveInspector() 在我使用自定义表单时返回正确的值,但对于默认联系表单不返回。
我需要 ActiveInspector 来根据 ActiveInspector().CurrentItem 中的属性值自定义功能区按钮。
是否可以在加载色带时访问 ActiveInspector。Application.ActiveInspector() 在我使用自定义表单时返回正确的值,但对于默认联系表单不返回。
我需要 ActiveInspector 来根据 ActiveInspector().CurrentItem 中的属性值自定义功能区按钮。
我对上述内容做了一些细微的改动,因为我维护了开放检查员的列表(我将检查员包装起来并将其保留在列表中)。在新的检查器事件中添加它们并在连接关闭事件关闭时删除它们。
在我的功能区代码中,我有一个静态方法 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);
您能否处理 Inspectors 集合的 NewInspector 事件,然后在您可以从功能区加载事件访问的静态字段(可能应该使用 WeakReference)中保留该事件?
我没有使用 Outlook 进行任何功能区自定义,但我已经在我的旧 Tablet PC 产品 TEO 中与检查员进行了大量工作。使用它们很麻烦,但您不想做的主要事情是长时间挂在 Inspector 参考上,因为关闭 Outlook 或取消挂起的编辑会遇到各种奇怪的问题。