Je fais une légère variation sur ce qui précède en ce que je maintiens la liste des inspecteurs ouverts (j'enveloppe l'inspecteur et le garde dans la liste). Les ajouter sur le nouvel événement d'inspecteur et les supprimer lors d'un événement de fermeture rapprochée.
Dans mon code de ruban, j'ai une méthode statique FindOutlookInspector qui trouve l'inspecteur en utilisant le control.context du ruban.
Quelque chose le long de ces lignes ..
OutlookInspector est ma classe d'inspecteur enveloppé, mais vous ne pouvez pas besoin que etc. Aussi je cherche uniquement à la poste Articles
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;
}
Ensuite, dans le code de ruban je peux appeler FindOutlookInspector
pour obtenir l'inspecteur enveloppé
OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context);
@ 76mel Assurez-vous de diminution explicitement les références COM de point o objets. YMMV. –