2016-07-26 13 views
0

Wenn der Benutzer das Vorschaufenster verwendet. Das NewInspector-Ereignis wird nicht ausgelöst. Worauf sollte ich mich einlassen?Outlook-Add-In, wie Sie feststellen können, ob der Benutzer neue Zeiten in der E-Mail aus der Besprechungsanfrage auswählt

Wenn der Benutzer die Nachricht öffnet, bekomme ich dieses Ereignis.

Application.Inspectors.NewInspector += InspectorOnNewInspector; 

From there i can hook to 

var appointmentItem = ((Outlook.AppointmentItem) inspector.CurrentItem); 
((Outlook.ItemEvents_10_Event) appointmentItem).PropertyChange += ThisAddIn_PropertyChange; 

vollständige Code

öffentlichen Outlook.Inspector CurrentInspector {get; einstellen; } public string Organizer {get; einstellen; }

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     Application.Inspectors.NewInspector += InspectorOnNewInspector; 
     Application.ActiveExplorer().SelectionChange += MeetingDurationAddIn_SelectionChange; 
    } 

    private void MeetingDurationAddIn_SelectionChange() 
    { 
     try 
     { 
      var currentView = Application.ActiveExplorer().CurrentView; 

      if (currentView is Outlook.CalendarView) 
      { 
       Console.WriteLine(""); 
      } 
     } 
     catch 
      (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 

    private void InspectorOnNewInspector(Outlook.Inspector inspector) 
    { 
     try 
     { 
      if (inspector.CurrentItem is Outlook.AppointmentItem) 
      { 
       CurrentInspector = inspector; 
       var creationTime = ((Outlook.AppointmentItem)CurrentInspector.CurrentItem).CreationTime; 
       if (creationTime == DateTime.Parse("1/1/4501 12:00:00 AM")) 
       { 
        NewAppointment = true; 
       } 
       if (CurrentInspector.CurrentItem is Outlook.AppointmentItem) 
       { 
        Appointment = true; 
       } 
       if (CurrentInspector.CurrentItem is Outlook.MeetingItem) 
       { 
        Appointment = false; 
       } 
       var appointmentItem = ((Outlook.AppointmentItem)CurrentInspector.CurrentItem); 
       ((Outlook.ItemEvents_10_Event) appointmentItem).Send += OnSend; 
       ((Outlook.ItemEvents_10_Event) appointmentItem).PropertyChange += ThisAddIn_PropertyChange; 
       MeetingId = appointmentItem.GlobalAppointmentID; 
       Organizer = appointmentItem.Organizer; 

       EditDuration(); 
      } 
     } 
     catch 
      (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 

Antwort

0

Das Ziel der Veranstaltung (Inspektoren) Brennen muss in einem globalen (Klasse) Variable gespeichert werden, um es zu verhindern, dass Müll gesammelt werden. Sie richten den Ereignishandler auf einer impliziten Variablen (Application.Inspectors) ein, die bei der nächsten Ausführung von GC veröffentlicht wird.

Zweitens, Preview-Bereich ist kein Inspektor, so wird NewIsnpector Event nicht ausgelöst. Verwenden Sie das Explorer.SelectionChanged-Ereignis.

+0

Ich habe den Code hinzugefügt. Netter Fang. aber das bringt mich nicht zum Vorschau-Artikel. –

+0

Siehe die aktualisierte Antwort. –

+0

Aktualisierte den Code .. können Sie mir mit der Zeile if (currentView ist Outlook.CalendarView) helfen. Das ist nicht richtig. Ich denke, ich sollte nach etwas anderem suchen. –