Exemplarische Vorgehensweise: Aktualisieren der Steuerelemente in einer Multifunktionsleiste zur Laufzeit

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Visual Studio Tools for Office-Projekte und Versionen von Microsoft Office.

Projekttyp

  • Projekte auf Dokumentebene

  • Projekte auf Anwendungsebene

Microsoft Office-Version

  • Excel 2007

  • Word 2007

  • Outlook 2007

  • PowerPoint 2007

Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

In dieser exemplarischen Vorgehensweise wird gezeigt, wie mit dem Multifunktionsleisten-Objektmodell die Steuerelemente auf einer Multifunktionsleiste nach dem Laden der Multifunktionsleiste in die Office-Anwendung aktualisiert werden.

In dem Beispiel werden die Daten der AdventureWorks-Beispieldatenbank entnommen, um ein Kombinationsfeld und ein Menü in Microsoft Office Outlook auszufüllen.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Erstellen eines neuen Outlook-Add-In-Projekts

  • Entwerfen einer benutzerdefinierten Multifunktionsleistengruppe

  • Hinzufügen der benutzerdefinierten Gruppe zu einer integrierten Registerkarte

  • Aktualisieren von Steuerelementen auf der Multifunktionsleiste während der Laufzeit

Hinweis:

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio, die in den folgenden Anweisungen aufgeführt sind, angezeigt. Die von Ihnen verwendete Visual Studio-Edition und die Einstellungen legen diese Elemente fest. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

  • Visual Studio Tools for Office (eine optionale Komponente von Visual Studio 2008 Professional und Visual Studio Team System).

  • Microsoft Office Outlook 2007.

  • Zugriff auf die AdventureWorks-Beispieldatenbank für SQL Server Express Weitere Information zum Erstellen der Datenbank AdventureWorks finden Sie unter Exemplarische Vorgehensweise: Installieren der AdventureWorks-Datenbank.

Visual Studio Tools for Office wird standardmäßig mit den aufgeführten Versionen von Visual Studio installiert. Wie Sie überprüfen können, ob die Software installiert ist, erfahren Sie in Installieren von Visual Studio Tools for Office.

Erstellen eines neuen Outlook-Add-In-Projekts

Erstellen Sie zuerst ein Outlook-Add-In-Projekt.

So erstellen Sie ein neues Outlook-Add-In-Projekt

  1. Erstellen Sie in Visual Studio ein Outlook 2007-Add-In-Projekt mit der Bezeichnung MyOutlookAddIn.

  2. Wählen Sie im Dialogfeld Neues Projekt die Option Projektmappenverzeichnis erstellen.

  3. Speichern Sie das Projekt im Standardprojektverzeichnis.

    Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Visual Studio Tools for Office-Projekte.

Entwerfen einer benutzerdefinierten Multifunktionsleistengruppe

Die Multifunktionsleiste wird nicht im Hauptschnittstellenbereich von Outlook angezeigt, sodass die Multifunktionsleiste für dieses Beispiel beim Erstellen einer neuen E-Mail-Nachricht angezeigt wird. Wenn Sie eine benutzerdefinierte Gruppe für die Multifunktionsleiste erstellen möchten, fügen Sie dem Projekt zuerst eine Multifunktionsleiste hinzu, und entwerfen Sie anschließend die Gruppe im Multifunktionsleisten-Designer. Mithilfe dieser benutzerdefinierten Gruppe können Sie Folge-E-Mail-Nachrichten für Kunden generieren, indem Sie einer Datenbank Namen und die bisherigen Bestellungen entnehmen.

So entwerfen Sie eine benutzerdefinierte Gruppe

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

  2. Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Multifunktionsleiste (Visual Designer) aus.

  3. Ändern Sie den Namen der neuen Multifunktionsleiste in CustomerRibbon, und klicken Sie anschließend auf Hinzufügen.

    Die Datei CustomerRibbon.cs oder CustomerRibbon.vb wird im Multifunktionsleisten-Designer geöffnet. Sie beinhaltet eine Standardregisterkarte und eine Gruppe.

  4. Klicken Sie auf den Multifunktionsleisten-Designer, um diesen auszuwählen.

  5. Klicken Sie im Menü Ansicht auf Eigenschaftenfenster.

  6. Klicken Sie im Fenster Eigenschaften auf den Dropdownpfeil neben der RibbonType-Eigenschaft, und klicken Sie anschließend af Microsoft.Outlook.Mail.Compose.

    Beim Erstellen einer neuen E-Mail-Nachricht in Outlook wird daraufhin wird die Multifunktionsleiste angezeigt.

  7. Klicken Sie im Multifunktionsleisten-Designer auf Group1, um diese Option auszuwählen.

  8. Legen Sie im Fenster Eigenschaften die Label-Eigenschaft auf Customer Purchases fest.

  9. Ziehen Sie von der Registerkarte Steuerelemente für Office-Multifunktionsleisten der Toolbox ein Steuerelement mit der Bezeichnung ComboBox zur Gruppe Customer Purchases.

  10. Klicken Sie auf ComboBox1, um das Element auszuwählen.

  11. Legen Sie im Fenster Eigenschaften die Label-Eigenschaft auf Customers fest.

  12. Ziehen Sie von der Registerkarte Steuerelemente für Office-Multifunktionsleisten der Toolbox ein Menü zur Gruppe Customer Purchases.

  13. Legen Sie im Fenster Eigenschaften die Label-Eigenschaft auf Product Purchased fest.

  14. Legen Sie Dynamic auf true fest.

    Dadurch können Sie Steuerelemente für das Menü während der Laufzeit hinzufügen und entfernen, nachdem die Multifunktionsleiste in die Office-Anwendung geladen wurde.

Hinzufügen der benutzerdefinierten Gruppe zu einer integrierten Registerkarte

Eine integrierte Registerkarte ist eine Registerkarte, die sich bereits auf der Multifunktionsleiste eines Outlook-Inspektors befindet. In dieser Prozedur wird die benutzerdefinierte Gruppe einer integrierten Registerkarte hinzugefügt und anschließend die Position der benutzerdefinierten Gruppe auf der Registerkarte angegeben.

So fügen die benutzerdefinierte Gruppe einer integrierten Registerkarte hinzu

  1. Klicken Sie auf die Registerkarte TabAddins (Integriert), um diese auszuwählen.

  2. Erweitern Sie im Fenster Eigenschaften die ControlId-Eigenschaft, und legen Sie die OfficeId-Eigenschaft auf TabNewMailMessage fest.

    Dadurch wird die Gruppe Customer Purchases der Registerkarte Nachrichten der Multifunktionsleiste hinzugefügt, die in einer neuen E-Mail-Nachricht angezeigt wird.

  3. Klicken Sie auf die Gruppe Customer Purchases, um diese auszuwählen.

  4. Erweitern Sie im Fenster Eigenschaften die Position-Eigenschaft, klicken Sie zuerst auf den Dropdownpfeil neben der PositionType-Eigenschaft und anschließend auf Microsoft.Outlook.Mail.Compose.

  5. Legen Sie die OfficeId-Eigenschaft auf GroupClipBoard fest.

    Dadurch wird die Gruppe Customer Purchases vor der Gruppe Zwischenablage der Registerkarte Nachrichten angeordnet.

Aktualisieren der Steuerelemente in der benutzerdefinierten Gruppe während der Laufzeit

Verwenden Sie das Multifunktionsleisten-Objektmodell zum Ausführen der folgenden Aufgaben:

  • Fügen Sie im Kombinationsfeld Customers Kundennamen hinzu.

  • Fügen Sie dem Menü Products Purchased Menü- und Kontrollkästchensteuerelemente hinzu, die Bestellungen und verkaufte Produkte darstellen.

  • Füllen Sie das Microsoft.Office.Interop.Outlook.MailItem.To, Microsoft.Office.Interop.Outlook.MailItem.Subject-Feld und das Microsoft.Office.Interop.Outlook.MailItem.Body-Feld neuer E-Mail-Nachrichten aus. Verwenden Sie dabei Daten aus dem Kombinationsfeld Customers und dem Menü Products Purchased.

So aktualisieren Sie Steuerelemente in der benutzerdefinierten Gruppe mithilfe des Multifunktionsleisten-Objektmodells

  1. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  2. Wählen Sie im Dialogfeld Verweis hinzufügen auf der Registerkarte .NET die System.Data.Linq aus-Assembly aus, und klicken Sie anschließend auf OK.

    Diese Assembly beinhaltet Klassen für die Verwendung von Language-Integrated Queries (LINQ). Mit LINQ werden Steuerelemente in der benutzerdefinierten Gruppe mit Daten aus der AdventureWorks-Datenbank ausgefüllt. Weitere Informationen zu LINQ finden Sie unter Sprachintegrierte Abfrage (Language-Integrated Query, LINQ).

  3. Klicken Sie im Projektmappen-Explorer auf CustomerRibbon.cs oder CustomerRibbon.vb, um diese Dateien auszuwählen.

  4. Klicken Sie im Menü Code auf anzeigen.

    Die Multifunktionsleisten-Codedatei wird im Code-Editor geöffnet.

  5. Fügen Sie am Anfang der Multifunktionsleisten-Codedatei die folgenden Anweisungen hinzu. Diese Anweisungen ermöglichen einfachen Zugriff auf LINQ-Namespaces und auf den Namespace der primären Interopassembly (PIA) von Outlook.

    Imports Microsoft.Office.Tools.Ribbon
    Imports System.Data.Linq
    Imports System.Linq
    Imports System.Data.Linq.Mapping
    Imports System.Linq.Expressions
    Imports Outlook = Microsoft.Office.Interop.Outlook
    
    using System.Data.Linq;
    using System.Linq;
    using System.Data.Linq.Mapping;
    using System.Linq.Expressions;
    using Outlook = Microsoft.Office.Interop.Outlook;
    using System.IO;
    
  6. Fügen Sie der Multifunktionsleisten-Codedatei die folgenden Klassen hinzu. Diese Klassen dienen zum Speichern von Informationen in den Tabellen für Kunden, Kontakte, Auftragsheader, Auftragsdetails und Produkte in der AdventureWorks-Datenbank.

    ' Customer Table.
    <Table(Name:="Sales.Customer")> _
    Public Class Customer
        <Column(IsPrimaryKey:=True)> _
            Public CustomerID As Integer
    End Class
    
    ' Contact Table.
    <Table(Name:="Person.Contact")> _
    Public Class Contact
        <Column(IsPrimaryKey:=True)> _
           Public ContactID As Integer
        <Column()> _
        Public LastName As String
    
    End Class
    ' Sales Order Header Table.
    <Table(Name:="Sales.SalesOrderHeader")> _
    Public Class SalesOrderHeader
        <Column(IsPrimaryKey:=True)> _
           Public SalesOrderID As Integer
        <Column()> _
       Public SalesOrderNumber As String
        <Column()> _
        Public CustomerID As Integer
    End Class
    
    ' Sales Order Detail Table.
    <Table(Name:="Sales.SalesOrderDetail")> _
    Public Class SalesOrderDetail
        <Column(IsPrimaryKey:=True)> _
           Public SalesOrderDetailID As Integer
        <Column()> _
       Public SalesOrderID As Integer
        <Column()> _
        Public ProductID As Integer
    End Class
    
    ' Product Table.
    <Table(Name:="Production.Product")> _
    Public Class Product
        <Column(IsPrimaryKey:=True)> _
           Public ProductID As Integer
        <Column()> _
        Public Name As String
    End Class
    ' Data Context Class.
    Partial Public Class AdventureWorks
        Inherits DataContext
        Public Customer As Table(Of Customer)
        Public Contact As Table(Of Contact)
        Public SalesOrderHeader As Table(Of SalesOrderHeader)
        Public SalesOrderDetail As Table(Of SalesOrderDetail)
        Public Product As Table(Of Product)
        Public Sub New(ByVal connection As String)
            MyBase.New(connection)
        End Sub
    End Class
    
    // Customer Table.
    [Table(Name = "Sales.Customer")]
    public class Customer
    {
        [Column(IsPrimaryKey = true)]
        public int CustomerID;
    }
    
    // Contact Table.
    [Table(Name = "Person.Contact")]
    public class Contact
    {
        [Column(IsPrimaryKey = true)]
        public int ContactID;
        [Column]
        public string LastName;
    
    }
    // Sales Order Header Table.
    [Table(Name = "Sales.SalesOrderHeader")]
    public class SalesOrderHeader
    {
        [Column(IsPrimaryKey = true)]
        public int SalesOrderID;
    
        [Column]
        public string SalesOrderNumber;
    
        [Column]
        public int CustomerID;
    
    }
    // Sales Order Detail Table.
    [Table(Name = "Sales.SalesOrderDetail")]
    public class SalesOrderDetail
    {
        [Column(IsPrimaryKey = true)]
        public int SalesOrderDetailID;
    
        [Column]
        public int SalesOrderID;
    
        [Column]
        public int ProductID;
    
    }
    // Product Table.
    [Table(Name = "Production.Product")]
    public class Product
    {
        [Column(IsPrimaryKey = true)]
        public int ProductID;
    
        [Column]
        public string Name;
    
    }
    // Data Context Table.
    public partial class AdventureWorks : DataContext
    {
        public Table<Customer> Customer;
        public Table<Contact> Contact;
        public Table<SalesOrderHeader> SalesOrderHeader;
        public Table<SalesOrderDetail> SalesOrderDetail;
        public Table<Product> Product;
        public AdventureWorks(string connection) : base(connection) { }
    }
    
  7. Ersetzen Sie die CustomerRibbon_Load-Ereignishandlermethode durch folgenden Code. In diesem Code wird für die folgenden Aufgaben eine LINQ-Abfrage verwendet:

    • Füllen Sie das Kombinationsfeld Customers mithilfe der ID und des Namens von zwanzig Kunden in der AdventureWorks-Datenbank aus.

    • Ruft die PopulateSalesOrderInfo-Hilfsmethode auf. Mit dieser Methode wird das Menü ProductsPurchased mit Verkaufauftragsnummern aktualisiert, die sich auf den derzeit ausgewählten Kunden beziehen.

     Private Sub CustomerRibbon_Load(ByVal sender As System.Object, _
    ByVal e As Microsoft.Office.Tools.Ribbon.RibbonUIEventArgs) _
        Handles MyBase.Load
    
         Dim programFilesDir As String = Environment.GetFolderPath _
         (Environment.SpecialFolder.ProgramFiles)
         Dim db As New AdventureWorks(programFilesDir + _
             "\Microsoft SQL Server\" + "MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf")
    
         Dim customerQuery = From customers In db.Customer.Take(20), contact In db.Contact _
                             Where customers.CustomerID = contact.ContactID _
                 Select CustomerID = customers.CustomerID, LastName = _
                     contact.LastName
    
         ' Execute the query.
         For Each item In customerQuery
             Me.ComboBox1.Items.Add(New RibbonDropDownItem())
             Me.ComboBox1.Items.Last().Label = item.CustomerID.ToString() _
                 + "|" + item.LastName
         Next item
    
         Me.ComboBox1.Text = Me.ComboBox1.Items.First().Label
         PopulateSalesOrderInfo()
     End Sub
    
    
    private void CustomerRibbon_Load(object sender, RibbonUIEventArgs e)
    {
        string programFilesDir = Environment.GetFolderPath
            (Environment.SpecialFolder.ProgramFiles);
        AdventureWorks db = new AdventureWorks
            (programFilesDir + "\\Microsoft SQL Server\\" + 
        "MSSQL.1\\MSSQL\\Data\\AdventureWorks_Data.mdf");
        var customerQuery = from customers in db.Customer.Take(20)
                            join contacts in db.Contact on 
                                customers.CustomerID 
                            equals contacts.ContactID
                            select new { customers.CustomerID, 
                                contacts.LastName };
    
    
        // Execute the query.
        foreach (var item in customerQuery)
        {
            this.comboBox1.Items.Add(new RibbonDropDownItem());
            this.comboBox1.Items.Last().Label = 
                item.CustomerID.ToString() + "|" + item.LastName;
        }
        this.comboBox1.Text = this.comboBox1.Items.First().Label;
        PopulateSalesOrderInfo();
    }
    
  8. Fügen Sie der CustomerRibbon-Klasse folgenden Code hinzu. In diesem Code werden für die folgenden Aufgaben LINQ-Abfragen verwendet:

    • Fügt dem Menü ProductsPurchased für jeden Verkaufsauftrag in Zusammenhang mit dem ausgewählten Kunden ein Untermenü hinzu.

    • Fügt jedem Untermenü Kontrollkästchen für die Produkte in Zusammenhang mit dem Verkaufsauftrag hinzu.

    • Fügt jedem Kontrollkästchen Ereignishandler hinzu.

     Private Sub PopulateSalesOrderInfo()
    
         Dim tempArray As [String]() = comboBox1.Text.Split(New [Char]() {"|"c})
         Menu1.Items.Clear()
         Dim programFilesDir As String = Environment.GetFolderPath _
             (Environment.SpecialFolder.ProgramFiles)
         Dim db As New AdventureWorks(programFilesDir + _
             "\Microsoft SQL Server\" + "MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf")
    
    
         Dim orderQuery = From orders In db.SalesOrderHeader _
                          Where orders.CustomerID.ToString() = tempArray(0) _
                          Select SalesOrderID = _
                              orders.SalesOrderID, SalesOrderNumber = _
                                  orders.SalesOrderNumber
    
         For Each orderItem In orderQuery
             Dim Menu2 As New RibbonMenu()
             Menu2.Dynamic = True
             Menu1.Items.Add(Menu2)
             CType(Menu1.Items.Last(), RibbonMenu).Label = _
                 orderItem.SalesOrderNumber.ToString()
             CType(Menu1.Items.Last(), RibbonMenu).Tag = _
                 orderItem.SalesOrderID
    
             Dim productQuery = From orderDetail In db.SalesOrderDetail, _
                                    product In db.Product _
                                Where orderDetail.ProductID = _
                                    product.ProductID _
                                And orderDetail.SalesOrderID = _
                                orderItem.SalesOrderID _
             Select productName = product.Name
    
             For Each productItem In productQuery
                 CType(Menu1.Items.Last(), RibbonMenu).Items.Add _
                     (New RibbonCheckBox())
                 CType(CType(Menu1.Items.Last(),  _
    RibbonMenu).Items.Last(), RibbonCheckBox).Label = productItem
                 AddHandler (CType(CType(Menu1.Items.Last(),  _
    RibbonMenu).Items.Last(), RibbonCheckBox).Click), AddressOf CheckBox_Click
    
             Next productItem
         Next orderItem
     End Sub
    
    
    
    
    private void PopulateSalesOrderInfo()
    {
        String[] tempArray = comboBox1.Text.Split(new Char[] { '|' });
        menu1.Items.Clear();
        string programFilesDir = Environment.GetFolderPath
            (Environment.SpecialFolder.ProgramFiles);
        AdventureWorks db = new AdventureWorks
            (programFilesDir + "\\Microsoft SQL Server\\" +
                "MSSQL.1\\MSSQL\\Data\\AdventureWorks_Data.mdf");
    
        var orderQuery = from orders in db.SalesOrderHeader
                         where orders.CustomerID.ToString() == tempArray[0]
                         select new { orders.SalesOrderID, 
                             orders.SalesOrderNumber };
    
        foreach (var orderItem in orderQuery)
        {
            RibbonMenu menu2 = new RibbonMenu();
            menu2.Dynamic = true;
            menu1.Items.Add(menu2);
            ((RibbonMenu)menu1.Items.Last()).Label = 
                orderItem.SalesOrderNumber.ToString();
            ((RibbonMenu)menu1.Items.Last()).Tag = 
                orderItem.SalesOrderID;
    
            var productQuery = from orderDetail in db.SalesOrderDetail
                               join product in db.Product on 
                                   orderDetail.ProductID 
                               equals product.ProductID
                               where orderDetail.SalesOrderID == 
                                   orderItem.SalesOrderID
                               select new { product.Name };
    
            foreach (var productItem in productQuery)
            {
                ((RibbonMenu)menu1.Items.Last()).Items.Add
                    (new RibbonCheckBox());
                ((RibbonCheckBox)((RibbonMenu)menu1.Items.Last()).
                    Items.Last()).Label = productItem.Name;
                ((RibbonCheckBox)((RibbonMenu)menu1.Items.Last()).
                    Items.Last()).Click 
                    += new EventHandler<RibbonControlEventArgs>(checkBox_Click);
            }
    
        }
    }
    
  9. Doppelklicken Sie im Projektmappen-Explorer auf die Multifunktionsleisten-Codedatei.

    Der Multifunktionsleisten-Designer wird geöffnet.

  10. Doppelklicken Sie im Multifunktionsleisten-Designer auf das Kombinationsfeld Customers.

    Die Multifunktionsleisten-Codedatei wird im Code-Editor geöffnet, und der ComboBox1_TextChanged-Ereignishandler wird angezeigt.

  11. Ersetzen Sie den ComboBox1_TextChanged-Ereignishandler durch folgenden Code. Mit diesen Code werden die folgenden Aufgaben ausgeführt:

    • Ruft die PopulateSalesOrderInfo-Hilfsmethode auf. Mit dieser Methode wird das Menü Products Purchased mit Verkaufsauftragsnummern aktualisiert, die sich auf den derzeit ausgewählten Kunden beziehen.

    • Ruft die PopulateMailItem-Hilfsmethode auf. Mit dieser Methode wird das Microsoft.Office.Interop.Outlook.MailItem.To-Feld, das Microsoft.Office.Interop.Outlook.MailItem.Subject-Feld und das Microsoft.Office.Interop.Outlook.MailItem.Body-Feld von neuen E-Mail-Nachrichten ausgefüllt.

    Private Sub ComboBox1_TextChanged(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles ComboBox1.TextChanged
        PopulateSalesOrderInfo()
        PopulateMailItem(ComboBox1.Text)
    End Sub
    
    private void comboBox1_TextChanged(object sender, 
        RibbonControlEventArgs e)
    {
        PopulateSalesOrderInfo();
        PopulateMailItem(comboBox1.Text);
    }
    
  12. Fügen Sie der CustomerRibbon-Klasse folgenden Code hinzu. Mit diesem Code wird der Name der ausgewählten Produkte dem Microsoft.Office.Interop.Outlook.MailItem.Body-Feld neuer E-Mail-Nachrichten hinzugefügt.

    Private Sub CheckBox_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs)
        Dim application As Outlook.Application = Globals.ThisAddIn.Application
        Dim inspector As Outlook.Inspector = application.ActiveInspector()
        Dim myMailItem As Outlook.MailItem = CType(inspector.CurrentItem,  _
            Outlook.MailItem)
        Dim myCheckBox As RibbonCheckBox = CType(sender, RibbonCheckBox)
        myMailItem.Subject = "Following up on your order"
        myMailItem.Body = myMailItem.Body + ControlChars.Lf + "* " _
            + myCheckBox.Label
    End Sub
    
    private void checkBox_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Application application = Globals.ThisAddIn.Application;
        Outlook.Inspector inspector = application.ActiveInspector();
        Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
        RibbonCheckBox myCheckBox = (RibbonCheckBox)sender;
        myMailItem.Subject = "Following up on your order";
        myMailItem.Body = myMailItem.Body + "\n" + "* " + myCheckBox.Label;
    }
    
  13. Fügen Sie der CustomerRibbon-Klasse folgenden Code hinzu. Mit diesen Code werden die folgenden Aufgaben ausgeführt:

    • Füllt die Microsoft.Office.Interop.Outlook.MailItem.To-Zeile neuer E-Mail-Nachrichten mithilfe der E-Mail-Adresse des derzeit ausgewählten Kunden aus.

    • Fügt dem Microsoft.Office.Interop.Outlook.MailItem.Subject-Feld und dem Microsoft.Office.Interop.Outlook.MailItem.Body-Feld neuer E-Mail-Nachrichten Text hinzu.

    Private Sub PopulateMailItem(ByVal addressToLine As String)
        Dim application As Outlook.Application = Globals.ThisAddIn.Application
        Dim inspector As Outlook.Inspector = application.ActiveInspector()
        Dim myMailItem As Outlook.MailItem = _
            CType(inspector.CurrentItem, Outlook.MailItem)
    
        myMailItem.To = ""
        Dim tempArray As [String]() = addressToLine.Split(New [Char]() {"|"c})
        myMailItem.To = tempArray(1) + "@example.com"
        myMailItem.Subject = "Following up on your order"
        myMailItem.Body = "Hello " + tempArray(1) + ","
        myMailItem.Body = myMailItem.Body + ControlChars.Lf + _
            "We would like to get your " + _
        "feedback on the following products that you recently ordered: "
    End Sub
    
    private void PopulateMailItem(string addressToLine)
    {
        Outlook.Application application = Globals.ThisAddIn.Application;
        Outlook.Inspector inspector = application.ActiveInspector();
        Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
    
        myMailItem.To = "";
        String[] tempArray = addressToLine.Split(new Char[] { '|' });
        myMailItem.To = tempArray[1] + "@example.com";
        myMailItem.Subject = "Following up on your order";
        myMailItem.Body = "Hello " + tempArray[1] + ",";
        myMailItem.Body = myMailItem.Body + "\n" + 
            "We would like to get your " + 
                "feedback on the following products that you recently ordered: ";
    }
    

Testen der Steuerelemente in der benutzerdefinierten Gruppe

Beim Öffnen eines neuen E-Mail-Formulars in Outlook wird auf der Registerkarte Nachrichten der Multifunktionsleiste eine benutzerdefinierte Gruppe mit der Bezeichnung Customer Purchases angezeigt.

Wählen Sie zum Erstellen einer Folge-E-Mail-Nachricht für Kunden einen Kunden und anschließend vom Kunden erworbene Produkte aus. Die Steuerelemente in der Gruppe Customer Purchases werden während der Laufzeit mit Daten aus der AdventureWorks-Datenbank aktualisiert.

So testen Sie die Steuerelemente in der benutzerdefinierten Gruppe

  1. Drücken Sie F5, um das Projekt auszuführen.

    Outlook wird gestartet.

  2. Zeigen Sie in Outlook im Menü Datei auf Neu, und klicken Sie dann auf E-Mail-Nachricht.

    Folgende Aktionen werden ausgeführt:

    • Ein neues Inspektorfenster für E-Mail-Nachrichten wird angezeigt.

    • Auf der Registerkarte Nachrichten der Multifunktionsleiste wird die Gruppe Customer Purchases vor der Gruppe Zwischenablage angezeigt.

    • Das Kombinationsfeld Customers in der Gruppe wird mit den Namen der Kunden in der AdventureWorks-Datenbank aktualisiert.

  3. Wählen Sie auf der Registerkarte Nachrichten der Multifunktionsleiste in der Gruppe Customer Purchases im Kombinationsfeld Customers einen Kunden aus.

    Folgende Aktionen werden ausgeführt:

    • Das Menü Products Purchased wird mit einem Menü aktualisiert, in dem jeder Verkaufsauftrag für den Kunden dargestellt wird.

    • Jedes Verkaufsauftragsmenü wird mit Kontrollkästchen aktualisiert, in denen die vom Kunden erworbenen Produkte dargestellt werden.

    • Die E-Mail-Adresse des ausgewählten Kunden wird der Zeile An der E-Mail-Nachricht hinzugefügt, und die Betreffzeile und der Textkörper der E-Mail-Nachricht werden mit Text ausgefüllt.

  4. Klicken Sie im Menü Products Purchased auf einen beliebigen Verkaufsauftrag, und klicken Sie anschließend auf ein Produkt im Verkaufsauftrag.

    Der Produktname wird dem Textkörper der E-Mail-Nachricht hinzugefügt.

Nächste Schritte

Weitere Informationen über das Anpassen der Office-Benutzeroberfläche finden Sie in diesen Themen:

Siehe auch

Aufgaben

Gewusst wie: Erste Schritte beim Anpassen der Multifunktionsleiste

Exemplarische Vorgehensweise: Erstellen einer benutzerdefinierten Registerkarte mit dem Multifunktionsleisten-Designer

Gewusst wie: Ändern der Reihenfolge von Registerkarten in der Multifunktionsleiste

Gewusst wie: Anpassen einer integrierten Registerkarte

Gewusst wie: Anpassen des Microsoft Office-Menüs

Gewusst wie: Exportieren einer Multifunktionsleiste aus dem Multifunktionsleisten-Designer in Multifunktionsleisten-XML

Gewusst wie: Anzeigen von Add-In-Benutzeroberflächenfehlern

Konzepte

Zugreifen auf die Multifunktionsleiste zur Laufzeit

Übersicht über die Multifunktionsleiste

Multifunktionsleisten-Designer

Multifunktionsleisten-Objektmodellübersicht

Anpassen einer Multifunktionsleiste in Outlook