Share via


Exemplarische Vorgehensweise: Anzeigen von benutzerdefinierten Aufgabenbereichen mit E-Mail-Nachrichten in Outlook

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie eine eindeutige Instanz eines benutzerdefinierten Aufgabenbereichs mit jeder erstellten oder geöffneten E-Mail-Nachricht angezeigt wird. Benutzer können den benutzerdefinierten Aufgabenbereich über eine Schaltfläche auf dem Menüband jeder E-Mail anzeigen oder ausblenden.

Gilt für: Die Informationen in diesem Thema gelten für VSTO-Add-In-Projekte für Outlook. Weitere Informationen finden Sie unter features available by Office-App lication and project type.

Wenn Sie einen benutzerdefinierten Aufgabenbereich mit mehreren Explorer- oder Inspektor-Fenstern anzeigen möchten, müssen Sie eine Instanz des benutzerdefinierten Aufgabenbereichs für jedes geöffnete Fenster erstellen. Weitere Informationen zum Verhalten von benutzerdefinierten Aufgabenbereichen in Outlook-Fenstern finden Sie unter "Benutzerdefinierte Aufgabenbereiche".

Hinweis

In dieser exemplarischen Vorgehensweise wird der VSTO-Add-In-Code in kleinen Abschnitten dargestellt, um die dem Code zugrunde liegende Logik einfacher zu erläutern.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Entwerfen der Benutzeroberfläche des benutzerdefinierten Aufgabenbereichs

  • Erstellen einer benutzerdefinierten Menüband-Benutzeroberfläche

  • Anzeigen der benutzerdefinierten Menüband-Benutzeroberfläche mit E-Mail-Nachrichten.

  • Erstellen einer Klasse zum Verwalten von Inspektor-Fenstern und benutzerdefinierten Aufgabenbereichen

  • Initialisieren und Bereinigen von Ressourcen, die durch das VSTO-Add-In verwendet werden

  • Synchronisieren der Umschaltfläche des Menübands mit dem benutzerdefinierten Aufgabenbereich

Hinweis

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren von Visual Studio-IDE.

Voraussetzungen

Zum Abschließen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Erstellen des Projekts

Benutzerdefinierte Aufgabenbereiche werden in VSTO-Add-Ins implementiert. Erstellen Sie zunächst ein VSTO-Add-In-Projekt für Outlook.

So erstellen Sie ein neues Projekt

  1. Erstellen Sie ein Outlook-Add-In -Projekt mit dem Namen OutlookMailItemTaskPane. Verwenden Sie die Projektvorlage Outlook-Add-In . Weitere Informationen finden Sie unter How to: Create Office projects in Visual Studio.

    Visual Studio öffnet die Codedatei ThisAddIn.cs oder ThisAddIn.vb und fügt das OutlookMailItemTaskPane-Projekt zu Projektmappen-Explorer hinzu.

Entwerfen der Benutzeroberfläche des benutzerdefinierten Aufgabenbereichs

Es gibt keinen visuellen Designer für benutzerdefinierte Aufgabenbereiche, Sie können aber dennoch ein Benutzersteuerelement mit der gewünschten Benutzeroberfläche entwerfen. Der benutzerdefinierte Aufgabenbereich in diesem VSTO-Add-In entspricht einer einfachen Benutzeroberfläche, die ein TextBox -Steuerelement enthält. Im weiteren Verlauf dieser exemplarischen Vorgehensweise fügen Sie dem benutzerdefinierten Aufgabenbereich das Benutzersteuerelement hinzu.

So entwerfen Sie die Benutzeroberfläche des benutzerdefinierten Aufgabenbereichs

  1. Klicken Sie im Projektmappen-Explorerauf das Projekt OutlookMailItemTaskPane .

  2. Klicken Sie im Menü Projekt auf Benutzersteuerelement hinzufügen.

  3. Ändern Sie im Dialogfeld Neues Element hinzufügen den Namen des Benutzersteuerelements in TaskPaneControl, und klicken Sie dann auf Hinzufügen.

    Das Benutzersteuerelement wird im Designer geöffnet.

  4. Ziehen Sie von der Registerkarte Allgemeine Steuerelemente der Toolboxein TextBox -Steuerelement auf das Benutzersteuerelement.

Entwerfen der Benutzeroberfläche des Menübands

Eines der Ziele für dieses VSTO-Add-In besteht darin, Benutzern eine Möglichkeit zu geben, den benutzerdefinierten Aufgabenbereich aus dem Menüband jeder E-Mail-Nachricht auszublenden oder anzuzeigen. Wenn Sie die Benutzeroberfläche bereitstellen möchten, erstellen Sie eine benutzerdefinierte Menüband-Benutzeroberfläche mit einer Umschaltfläche, über die Benutzer den benutzerdefinierten Aufgabenbereich durch Klicken anzeigen oder ausblenden können.

So erstellen Sie eine benutzerdefinierte Menüband-Benutzeroberfläche

  1. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

  2. Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Menüband (Visueller Designer)aus.

  3. Ändern Sie den Namen des neuen Menübands in ManageTaskPaneRibbon, und klicken Sie auf Hinzufügen.

    Die Datei ManageTaskPaneRibbon.cs oder ManageTaskPaneRibbon.vb wird im Menüband-Designer geöffnet. Sie enthält eine Standardregisterkarte und eine Gruppe.

  4. Klicken Sie im Menüband-Designer auf group1.

  5. Legen Sie im Fenster Eigenschaften die Eigenschaft Label auf Task Pane Managerfest.

  6. Ziehen Sie ein ToggleButton-Steuerelement von der Registerkarte Steuerelemente für Office-Menübänder der Toolboxauf die Gruppe Task Pane Manager .

  7. Klicken Sie auf toggleButton1.

  8. Legen Sie im Fenster Eigenschaften die Label -Eigenschaft auf Aufgabenbereich anzeigenfest.

Anzeigen der benutzerdefinierten Benutzeroberfläche des Menübands mit E-Mail-Nachrichten

Der in dieser exemplarischen Vorgehensweise erstellte benutzerdefinierte Aufgabenbereich ist so konzipiert, dass er nur in Inspektor-Fenstern angezeigt wird, die E-Mails enthalten. Lesen Sie die Eigenschaften daher so fest, dass die benutzerdefinierte Menüband-Benutzeroberfläche nur in diesen Fenstern angezeigt wird.

So zeigen Sie die benutzerdefinierte Menüband-Benutzeroberfläche mit E-Mail-Nachrichten an

  1. Klicken Sie im Menüband-Designer auf das Menüband ManageTaskPaneRibbon .

  2. Klicken Sie im Fenster Eigenschaften auf die Dropdownliste neben RibbonType, und wählen Sie Microsoft.Outlook.Mail.Compose und Microsoft.Outlook.Mail.Readaus.

Erstellen einer Klasse zum Verwalten von Inspektorfenstern und benutzerdefinierten Aufgabenbereichen

Es gibt mehrere Fälle, in denen das VSTO-Add-In identifizieren muss, welcher benutzerdefinierte Aufgabenbereich einer bestimmten E-Mail-Nachricht zugeordnet ist. Dazu gehören folgende Situationen:

  • Wenn der Benutzer eine E-Mail-Nachricht schließt. In diesem Fall muss das VSTO-Add-In den entsprechenden benutzerdefinierten Aufgabenbereich entfernen, um sicherzustellen, dass die vom VSTO-Add-In verwendeten Ressourcen ordnungsgemäß bereinigt werden.

  • Der Benutzer schließt den benutzerdefinierten Aufgabenbereich. In diesem Fall muss das VSTO-Add-In den Status der Umschaltfläche im Menüband der E-Mail-Nachricht aktualisieren.

  • Wenn der Benutzer auf die Umschaltfläche im Menüband klickt. In diesem Fall muss das VSTO-Add-In den entsprechenden Aufgabenbereich anzeigen oder ausblenden.

    Um das VSTO-Add-In zu aktivieren, um nachzuverfolgen, welcher benutzerdefinierte Aufgabenbereich jeder geöffneten E-Mail-Nachricht zugeordnet ist, erstellen Sie eine benutzerdefinierte Klasse, die Paare und InspectorCustomTaskPane Objekte umschließt. Diese Klasse erstellt ein neues benutzerdefiniertes Aufgabenbereichsobjekt für jede E-Mail-Nachricht und löscht den benutzerdefinierten Aufgabenbereich, wenn die entsprechende E-Mail-Nachricht geschlossen wird.

So erstellen Sie eine Klasse zum Verwalten von Inspektorfenstern und benutzerdefinierten Aufgabenbereichen

  1. Klicken Sie im Projektmappen-Explorermit der rechten Maustaste auf die Datei ThisAddIn.cs oder ThisAddIn.vb , und klicken Sie dann auf Code anzeigen.

  2. Fügen Sie am Anfang der Datei die folgenden -Anweisungen hinzu.

    using Microsoft.Office.Tools;
    
  3. Fügen Sie der Datei ThisAddIn.cs oder ThisAddIn.vb folgenden Code außerhalb der ThisAddIn -Klasse hinzu (für Visual C# fügen Sie diesen Code im OutlookMailItemTaskPane -Namespace hinzu). Die InspectorWrapper -Klasse verwaltet ein Paar von Inspector - und CustomTaskPane -Objekten. Sie schließen die Definition dieser Klasse in den folgenden Schritten ab.

    public class InspectorWrapper
    {
        private Outlook.Inspector inspector;
        private CustomTaskPane taskPane;
    
  4. Fügen Sie nach dem Code, den Sie im vorherigen Schritt hinzugefügt haben, den folgenden Konstruktor hinzu. Dieser Konstruktor erstellt und initialisiert einen neuen benutzerdefinierten Aufgabenbereich, der dem übergebenen Inspector -Objekt zugeordnet ist. In C# fügt der Konstruktor außerdem Ereignishandler an das Close -Ereignis des Inspector -Objekts und das VisibleChanged -Ereignis des CustomTaskPane -Objekts an.

    public InspectorWrapper(Outlook.Inspector Inspector)
    {
        inspector = Inspector;
        ((Outlook.InspectorEvents_Event)inspector).Close +=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
        
        taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(
            new TaskPaneControl(), "My task pane", inspector);
        taskPane.VisibleChanged += new EventHandler(TaskPane_VisibleChanged);
    }
    
  5. Fügen Sie nach dem Code, den Sie im vorherigen Schritt hinzugefügt haben, die folgende Methode hinzu. Diese Methode ist ein Ereignishandler für das VisibleChanged -Ereignis des in der CustomTaskPane -Klasse enthaltenen InspectorWrapper -Objekts. Dieser Code aktualisiert den Zustand der Umschaltfläche, sobald der Benutzer den benutzerdefinierten Aufgabenbereich öffnet oder schließt.

    void TaskPane_VisibleChanged(object sender, EventArgs e)
    {
        Globals.Ribbons[inspector].ManageTaskPaneRibbon.toggleButton1.Checked = 
            taskPane.Visible;
    }
    
  6. Fügen Sie nach dem Code, den Sie im vorherigen Schritt hinzugefügt haben, die folgende Methode hinzu. Diese Methode ist ein Ereignishandler für das Close Ereignis des Inspector Objekts, das die aktuelle E-Mail-Nachricht enthält. Der Ereignishandler gibt Ressourcen frei, wenn die E-Mail-Nachricht geschlossen wird. Der Ereignishandler entfernt auch den aktuellen benutzerdefinierten Aufgabenbereich aus der CustomTaskPanes -Auflistung. Dadurch können mehrere Instanzen des benutzerdefinierten Aufgabenbereichs verhindert werden, wenn die nächste E-Mail-Nachricht geöffnet wird.

    void InspectorWrapper_Close()
    {
        if (taskPane != null)
        {
            Globals.ThisAddIn.CustomTaskPanes.Remove(taskPane);
        }
    
        taskPane = null;
        Globals.ThisAddIn.InspectorWrappers.Remove(inspector);
        ((Outlook.InspectorEvents_Event)inspector).Close -=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
        inspector = null;
    }
    
  7. Fügen Sie nach dem Code, den Sie im vorherigen Schritt hinzugefügt haben, den folgenden Code hinzu. Weiter unten in dieser exemplarischen Vorgehensweise rufen Sie diese Eigenschaft von einer Methode in der benutzerdefinierten Menüband-Benutzeroberfläche auf, um den benutzerdefinierten Aufgabenbereich anzuzeigen oder auszublenden.

        public CustomTaskPane CustomTaskPane
        {
            get
            {
                return taskPane;
            }
        }
    }
    

Initialisieren und sauber ressourcen, die vom Add-In verwendet werden

Fügen Sie der ThisAddIn -Klasse Code hinzu, durch den das VSTO-Add-In beim Laden initialisiert und die vom VSTO-Add-In verwendeten Ressourcen beim Entladen des Add-Ins bereinigt werden. Sie initialisieren das VSTO-Add-In, indem Sie einen Ereignishandler für das NewInspector Ereignis einrichten und alle vorhandenen E-Mail-Nachrichten an diesen Ereignishandler übergeben. Sobald das VSTO-Add-In entladen wird, trennen Sie den Ereignishandler und bereinigen die vom VSTO-Add-In verwendeten Objekte.

So initialisieren und bereinigen Sie die vom VSTO-Add-In verwendeten Ressourcen

  1. Suchen Sie in der Datei ThisAddIn.cs oder ThisAddIn.vb die Definition der ThisAddIn -Klasse.

  2. Fügen Sie der ThisAddIn -Klasse die folgenden Deklarationen hinzu:

    • Das inspectorWrappersValue -Feld enthält alle vom VSTO-Add-In verwalteten Inspector - und InspectorWrapper -Objekte.

    • Das inspectors -Feld behält einen Verweis auf die Auflistung von Inspektor-Fenstern in der aktuellen Outlook-Instanz. Dieser Verweis verhindert, dass der Garbage Collector den Arbeitsspeicher freigibt, der den Ereignishandler für das NewInspector -Ereignis enthält, das Sie im nächsten Schritt deklarieren.

      private Dictionary<Outlook.Inspector, InspectorWrapper> inspectorWrappersValue =
          new Dictionary<Outlook.Inspector, InspectorWrapper>();
      private Outlook.Inspectors inspectors;
      

  3. Ersetzen Sie die ThisAddIn_Startup-Methode durch den folgenden Code. Dieser Code fügt einen Ereignishandler an das NewInspector -Ereignis an und übergibt alle vorhandenen Inspector -Objekte an den Ereignishandler. Wenn der Benutzer das VSTO-Add-In lädt, nachdem Outlook bereits ausgeführt wurde, verwendet das VSTO-Add-In diese Informationen, um benutzerdefinierte Aufgabenbereiche für alle bereits geöffneten E-Mail-Nachrichten zu erstellen.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        inspectors = this.Application.Inspectors;
        inspectors.NewInspector +=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
    
        foreach (Outlook.Inspector inspector in inspectors)
        {
            Inspectors_NewInspector(inspector);
        }
    }
    
  4. Ersetzen Sie die ThisAddIn_ShutDown-Methode durch den folgenden Code. Dieser Code trennt den NewInspector -Ereignishandler und bereinigt die vom VSTO-Add-In verwendeten Objekte.

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        inspectors.NewInspector -=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
        inspectors = null;
        inspectorWrappersValue = null;
    }
    
  5. Fügen Sie der NewInspector -Klasse den folgenden ThisAddIn -Ereignishandler hinzu. Wenn ein neues Inspector eine E-Mail-Nachricht enthält, erstellt die Methode eine Instanz eines neuen InspectorWrapper Objekts, um die Beziehung zwischen der E-Mail-Nachricht und dem entsprechenden Aufgabenbereich zu verwalten.

    void Inspectors_NewInspector(Outlook.Inspector Inspector)
    {
        if (Inspector.CurrentItem is Outlook.MailItem)
        {
            inspectorWrappersValue.Add(Inspector, new InspectorWrapper(Inspector));
        }
    }
    
  6. Fügen Sie der ThisAddIn -Klasse folgende Eigenschaft hinzu. Diese Eigenschaft macht das private inspectorWrappersValue -Feld für Code außerhalb der ThisAddIn -Klasse verfügbar.

    public Dictionary<Outlook.Inspector, InspectorWrapper> InspectorWrappers
    {
        get
        {
            return inspectorWrappersValue;
        }
    }
    

Prüfpunkt

Erstellen Sie Ihr Projekt, um sicherzustellen, dass es ohne Fehler kompiliert wird.

So erstellen Sie das Projekt

  1. Klicken Sie im Projektmappen-Explorermit der rechten Maustaste auf das Projekt OutlookMailItemTaskPane , und klicken Sie dann auf Erstellen. Vergewissern Sie sich, dass das Projekt ohne Fehler kompiliert wurde.

Synchronisieren der Umschaltfläche des Menübands mit dem benutzerdefinierten Aufgabenbereich

Die Umschaltfläche erscheint gedrückt, wenn der Aufgabenbereich sichtbar ist, und nicht gedrückt, wenn der Aufgabenbereich ausgeblendet ist. Wenn Sie den Zustand der Schaltfläche mit dem benutzerdefinierten Aufgabenbereich synchronisieren möchten, ändern Sie den Click -Ereignishandler der Umschaltfläche.

So synchronisieren Sie den benutzerdefinierten Aufgabenbereich mit der Umschaltfläche

  1. Doppelklicken Sie im Menüband-Designer auf die Umschaltfläche Aufgabenbereich anzeigen .

    Visual Studio generiert automatisch einen Ereignishandler namens toggleButton1_Click, der das Click -Ereignis der Umschaltfläche verarbeitet. Visual Studio öffnet außerdem die Datei ManageTaskPaneRibbon.cs oder ManageTaskPaneRibbon.vb im Code-Editor.

  2. Fügen Sie die folgenden Anweisungen am Anfang der Datei ManageTaskPaneRibbon.cs oder ManageTaskPaneRibbon.vb ein.

    using Outlook = Microsoft.Office.Interop.Outlook;
    using Microsoft.Office.Tools;
    
  3. Ersetzen Sie den toggleButton1_Click -Ereignishandler durch den folgenden Code. Wenn der Benutzer auf die Umschaltfläche klickt, wird der benutzerdefinierte Aufgabenbereich, der dem aktuellen Inspektor-Fenster zugeordnet ist, durch diese Methode angezeigt oder ausgeblendet.

    private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Inspector inspector = (Outlook.Inspector)e.Control.Context;
        InspectorWrapper inspectorWrapper = Globals.ThisAddIn.InspectorWrappers[inspector];
        CustomTaskPane taskPane = inspectorWrapper.CustomTaskPane;
        if (taskPane != null)
        {
            taskPane.Visible = ((RibbonToggleButton)sender).Checked;
        }
    }
    

Testen des Projekts

Sobald Sie das Debuggen des Projekts starten, wird Outlook geöffnet und das VSTO-Add-In geladen. Das VSTO-Add-In zeigt eine eindeutige Instanz des benutzerdefinierten Aufgabenbereichs mit jeder geöffneten E-Mail-Nachricht an. Erstellen Sie mehrere neue E-Mail-Nachrichten, um den Code zu testen.

So testen Sie das VSTO-Add-In

  1. Drücken Sie F5.

  2. Klicken Sie in Outlook auf "Neu ", um eine neue E-Mail-Nachricht zu erstellen.

  3. Klicken Sie im Menüband der E-Mail-Nachricht auf die Registerkarte "Add-Ins " und dann auf die Schaltfläche "Aufgabenbereich anzeigen".

    Vergewissern Sie sich, dass ein Aufgabenbereich mit dem Titel "Mein Aufgabenbereich " mit der E-Mail-Nachricht angezeigt wird.

  4. Geben Sie im Aufgabenbereich Erster Aufgabenbereich in das Textfeld ein.

  5. Schließen Sie den Aufgabenbereich.

    Überprüfen Sie, ob sich der Zustand der Schaltfläche Aufgabenbereich anzeigen ändert, sodass sie nicht mehr gedrückt erscheint.

  6. Klicken Sie erneut auf die Schaltfläche Aufgabenbereich anzeigen .

    Stellen Sie sicher, dass der Aufgabenbereich geöffnet wird und das Textfeld weiterhin die Zeichenfolge Erster Aufgabenbereichenthält.

  7. Klicken Sie in Outlook auf "Neu ", um eine zweite E-Mail-Nachricht zu erstellen.

  8. Klicken Sie im Menüband der E-Mail-Nachricht auf die Registerkarte "Add-Ins " und dann auf die Schaltfläche "Aufgabenbereich anzeigen".

    Vergewissern Sie sich, dass ein Aufgabenbereich mit dem Titel "Mein Aufgabenbereich " mit der E-Mail-Nachricht angezeigt wird und das Textfeld in diesem Aufgabenbereich leer ist.

  9. Geben Sie im Aufgabenbereich Zweiter Aufgabenbereich in das Textfeld ein.

  10. Ändern Sie den Fokus auf die erste E-Mail-Nachricht.

    Stellen Sie sicher, dass der Aufgabenbereich, der dieser E-Mail-Nachricht zugeordnet ist, weiterhin den ersten Aufgabenbereich im Textfeld anzeigt.

    Das VSTO-Add-In behandelt auch komplexere Szenarien, die Sie ausprobieren können. Beispielsweise können Sie das Verhalten beim Anzeigen von E-Mails mithilfe der Schaltflächen "Nächstes Element" und "Vorheriges Element" testen. Sie können das Verhalten auch testen, wenn Sie das VSTO-Add-In entladen, mehrere E-Mail-Nachrichten öffnen und dann das VSTO-Add-In erneut laden.

Nächste Schritte

Weitere Informationen über das Erstellen von benutzerdefinierten Aufgabenbereichen finden Sie in diesen Themen: