是否可以在功能区加载时访问ActiveInspector。当我使用自定义表单时,Application.ActiveInspector()返回正确的值,但不是默认的联系表单。
我需要ActiveInspector来自定义功能区按钮,具体取决于ActiveInspector()中的属性值.CurrentItem。
答案 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或取消待处理的编辑而遇到各种奇怪的问题。