Ich mache eine leichte Variation über die oben in, dass ich Liste der offenen Inspektoren pflegen (ich wickle den Inspektor und behalte das in der Liste). Hinzufügen sie auf dem neuen Inspector-Ereignis und entfernen sie auf einem verdrahteten Close-Event zu schließen.
In meinem Menübandcode habe ich eine statische Methode FindOutlookInspector, die den Inspektor mit dem control.context des Menübands findet.
Etwas in dieser Richtung ..
OutlookInspector ist Klasse meine gewickelt Inspektor, aber Sie können nicht, dass usw. benötigen auch mich interessiert nur Postsendungen
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;
}
Dann im Code Band kann ich rufen FindOutlookInspector
der umwickelte Inspektor
OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context);
@ 76mel Achten Sie darauf, zu erhalten, verringert explizit eine der COM-Referenzen von Punkt o Objekte. YMMV. –