Я слегка изменяю вышесказанное в том, что я веду список открытых инспекторов (я оборачиваю инспектор и сохраняю его в списке).
Добавление их в новое событие инспектора и удаление их при закрытии проводного события закрытия.
В моем коде ленты у меня есть статический метод 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);