Sdílet prostřednictvím


Návod: Aktualizace ovládacích prvků na pásu karet za běhu

Tento návod ukazuje, jak použít objektový model pásu po pásu karet je načten do aplikace Office aktualizovat ovládací prvky pásu karet.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni dokumentu i na úrovni aplikace v těchto aplikacích: Excel 2013 a Excel 2010, InfoPath 2013 a InfoPath 2010, Outlook 2013 a Outlook 2010, PowerPoint 2013 a PowerPoint 2010, Project 2013 a Project 2010, Visio 2013 a Visio 2010, Word 2013 a Word 2010. Další informace najdete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

Příklad čte data z ukázkové databáze Northwind naplnit pole se seznamem a nabídky v aplikace Microsoft Office Outlook.Položky, které vyberete v těchto ovládacích prvků automaticky naplnit pole jako na a Předmět e-mailové zprávy.

Tento návod ilustruje následující úkoly:

  • Vytvoření nové doplněk pro aplikaci Outlook projektu.

  • Návrh vlastní skupiny pásu karet.

  • Přidání vlastní skupinu na předdefinovanou kartu.

  • Aktualizace ovládacích prvků na pásu karet v době běhu.

[!POZNÁMKA]

Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Požadavky

Chcete-li dokončit tento návod, potřebujete následující komponenty:

Vytvoření nové aplikace Outlook přidat do projektu

Nejprve vytvořte projekt doplněk pro aplikaci Outlook.

Chcete-li vytvořit nový doplněk pro aplikaci Outlook projekt

  1. V Visual Studio, vytvořit Outlook 2010 nebo Outlook 2013 přidat projekt s názvem Ribbon_Update_At_Runtime.

  2. V Nový projekt dialogovém vytvořit adresář pro řešení.

  3. Uložte projekt do výchozího adresáře projektu.

    Další informace naleznete v tématu Postupy: Vytváření projektů pro systém Office v prostředí Visual Studio.

Pás karet pro tento příklad zobrazí, když uživatel vytvoří novou zprávu.Vytvořit vlastní skupiny pásu karet, první položka pásu karet přidat do projektu a pak navrhnout skupiny Návrhář pásu karet.Tento vlastní skupiny můžete generovat zpracování e-mailové zprávy zákazníkům vyžádáním názvy a pořadí historie z databáze.

  1. V nabídce Projekt klikněte na příkaz Přidat novou položku.

  2. V Přidat novou položku dialogovém pásu karet (vizuální návrhář).

  3. Změňte název nové pásu karet na CustomerRibbona klepněte na tlačítko Přidat.

    CustomerRibbon.cs nebo CustomerRibbon.vb soubor se otevře v Návrháři pásu karet a zobrazí výchozí kartu a skupiny.

  4. Klepněte na Návrhář pásu karet, vyberte jej.

  5. V Vlastnosti okno, klepněte na šipku rozevíracího seznamu vedle RibbonType vlastnost a pak klepněte na Microsoft.Outlook.Mail.Compose.

    Díky pásu karet se zobrazí, pokud uživatel vytvoří novou zprávu v aplikaci Outlook.

  6. Návrhář pásu karet klepněte na tlačítko skupina1 jej vyberte.

  7. V Vlastnosti okno, nastavit štítek na nákupy zákazníka.

  8. Z Ovládací prvky pásu karet Office kartě nástrojů, přetáhněte ComboBox na Nákupy zákazníka skupiny.

  9. Klepněte na ComboBox1 jej vyberte.

  10. V Vlastnosti okno, nastavit štítek zákazníkům.

  11. Z Ovládací prvky pásu karet Office kartě nástrojů, přetáhněte nabídky na Nákupy zákazníka skupiny.

  12. V Vlastnosti okno, nastavit štítek k zakoupení produktu.

  13. Set Dynamic to true.

    Umožňuje přidávat a odebírat ovládací prvky v nabídce v době spuštění po pásu karet je načten do aplikace sady Office.

Přidání skupiny vlastní integrovanou kartu

Vestavěné karta je karta, která je již na pásu karet aplikace Outlook, Průzkumník nebo inspektor.V tomto postupu integrovanou kartu přidat vlastní skupiny a zadejte umístění vlastní skupiny na kartě.

Přidat předdefinovanou kartu vlastní skupiny.

  1. Klepněte TabAddins (předdefinovaná) kartu a vyberte jej.

  2. V Vlastnosti okno, rozbalte ControlId vlastnost a poté nastavte OfficeId na TabNewMailMessage.

    Přidá Nákupy zákazníka do skupiny zprávy kartu pásu karet, který se zobrazí nové e-mailové zprávy.

  3. Klepněte Nákupy zákazníka skupinu, vyberte jej.

  4. V Vlastnosti okno, rozbalte pozice vlastnost, klepněte na šipku rozevíracího seznamu vedle PositionType vlastnost a pak klepněte na BeforeOfficeId.

  5. Nastavit OfficeId vlastnost GroupClipboard.

    Tato pozice Nákupy zákazníka skupina před schránky skupinu zprávy kartu.

Vytváření zdroje dat

Použití Zdroje dat okno Přidat do projektu definovanou datovou sadu.

Vytvořit zdroj dat

  1. Na dat nabídky, klepněte na Přidat nový zdroj dat.

    Spustí Průvodce konfigurací zdroje dat.

  2. Vyberte databázea klepněte na tlačítko Další.

  3. Vyberte Dataseta klepněte na tlačítko Další.

  4. Vyberte datové připojení k Microsoft SQL Server Compact 4.0 ukázková databáze Northwind nebo přidat nové připojení pomocí Nové připojení tlačítko.

  5. Po vybrané připojení nebo vytvořili klepnutím na tlačítko Další.

  6. Klepněte na Další uložit připojovací řetězec.

  7. Na Zvolte vaše databázové objekty stránky, rozbalte položku tabulky.

  8. Zaškrtněte políčko vedle každé z následujících tabulek:

    1. Zákazníci

    2. Podrobnosti objednávky

    3. Objednávky

    4. Produkty

  9. Klepněte na tlačítko Dokončit.

Aktualizace skupiny vlastní ovládací prvky za běhu

Použití objektového modelu pásu provádět následující úkoly:

  • Přidat názvy zákazníků Zákazníci pole se seznamem.

  • Přidat ovládací prvky do nabídky a tlačítka Produkty zakoupené nabídce, která představují prodejní objednávky a výrobky prodávané.

  • Naplnění To, Subject, a Body pole nové zprávy elektronické pošty pomocí dat z Zákazníci pole se seznamem a Produkty zakoupené nabídky.

Aktualizovat vlastní skupinu ovládacích prvků pomocí objektového modelu pásu karet

  1. V nabídce Projekt klepněte na příkaz Přidat odkaz.

  2. V Přidat odkaz dialogové okno klepněte .NET kartě vyberte System.Data.Linq sestavení a poté klepněte na OK.

    Toto sestavení obsahuje třídy pro použití Language-Integrated dotazy (LINQ).LINQ použije k naplnění ovládacích prvků do vlastní skupiny s daty z databáze Northwind.

  3. V Průzkumníku, klepněte na CustomerRibbon.cs nebo CustomerRibbon.vb jej vyberte.

  4. V menu Zobrazit klikněte na příkaz Kód.

    Otevře soubor pásu kódu v editoru kódu.

  5. Přidejte následující příkazy na začátek souboru kódu pásu karet.Tyto příkazy poskytují snadný přístup k LINQ obory názvů a obor názvů aplikaci Outlook primární sestavení interop (PIA).

    Imports System.Data.Linq
    Imports System.Linq
    Imports System.Data.Linq.Mapping
    Imports System.Linq.Expressions
    Imports Outlook = Microsoft.Office.Interop.Outlook
    Imports Ribbon_Update_At_Runtime.Northwind40DataSetTableAdapters
    
    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    using System.Linq.Expressions;
    using Outlook = Microsoft.Office.Interop.Outlook;
    using System.Data;
    using System.IO;
    using Ribbon_Update_At_Runtime.Northwind40DataSetTableAdapters;
    
  6. Přidejte následující kód do třídy CustomerRibbon.Tento kód deklaruje datové tabulky a tabulky adaptéry, které budete používat k ukládání informací od zákazníků, objednávek, podrobnosti objednávky a produktu tabulek databáze Northwind.

        'Declare the Northwind data set. 
    
        Dim nwDataSet As Northwind40DataSet = New Northwind40DataSet()
    
        'Declare the data tables. 
    
        Dim customerTable As Northwind40DataSet.CustomersDataTable
        Dim orderTable As Northwind40DataSet.OrdersDataTable
        Dim orderDetailsTable As Northwind40DataSet.Order_DetailsDataTable
        Dim productsTable As Northwind40DataSet.ProductsDataTable
    
        'Declare the data table adapters for each table. 
    
        Dim customersTableAdapter As CustomersTableAdapter = New CustomersTableAdapter()
        Dim ordersTableAdapter As OrdersTableAdapter = New OrdersTableAdapter()
        Dim detailsTableAdapter As Order_DetailsTableAdapter = New Order_DetailsTableAdapter()
        Dim productsTableAdapter As ProductsTableAdapter = New ProductsTableAdapter()
    
    //Declare the Northwind dataset.
    Northwind40DataSet nwDataSet = new Northwind40DataSet();
    
    //Declare the data tables.
    
    Northwind40DataSet.CustomersDataTable customerTable;
    Northwind40DataSet.OrdersDataTable orderTable;
    Northwind40DataSet.Order_DetailsDataTable orderDetailsTable;
    Northwind40DataSet.ProductsDataTable productsTable;
    
    //Declare the data table adapters for each table.
    
    CustomersTableAdapter customerTableAdapter = new CustomersTableAdapter();
    OrdersTableAdapter ordersTableAdapter = new OrdersTableAdapter();
    Order_DetailsTableAdapter detailsTableAdapter = new Order_DetailsTableAdapter();
    ProductsTableAdapter productsTableAdapter = new ProductsTableAdapter();
    
  7. Přidejte následující blok kódu CustomerRibbon třídy.Tento kód přidá tři pomocné metody, které vytvořit ovládací prvky pásu karet za běhu.

    Private Function CreateRibbonDropDownItem() As RibbonDropDownItem
        Return Me.Factory.CreateRibbonDropDownItem()
    End Function 
    
    Private Function CreateRibbonMenu() As RibbonMenu
        Return Me.Factory.CreateRibbonMenu()
    End Function 
    
    Private Function CreateRibbonButton() As RibbonButton
        Dim button As RibbonButton = Me.Factory.CreateRibbonButton()
        AddHandler (button.Click), AddressOf Button_Click
        Return button
    End Function
    
    private RibbonDropDownItem CreateRibbonDropDownItem()
    {
        return this.Factory.CreateRibbonDropDownItem();
    }
    private RibbonMenu CreateRibbonMenu()
    {
        return this.Factory.CreateRibbonMenu();
    }
    private RibbonButton CreateRibbonButton()
    {
        RibbonButton button = this.Factory.CreateRibbonButton();
        button.Click += new RibbonControlEventHandler(button_Click);
        return button;
    }
    
  8. Nahradit CustomerRibbon_Load metoda obslužné rutiny události s následujícím kódem.Tento kód používá LINQ dotaz následující úlohy:

    • Naplnění Zákazníci pole se seznamem pomocí ID a název 20 zákazníci v databázi Northwind.

    • Volání PopulateSalesOrderInfo pomocnou metodu.Tato metoda aktualizace ProductsPurchased nabídka s čísla prodejní objednávky, která se vztahují k aktuálně vybranému odběrateli.

    Private Sub CustomerRibbon_Load(ByVal sender As System.Object, _
       ByVal e As Microsoft.Office.Tools.Ribbon.RibbonUIEventArgs) _
           Handles MyBase.Load
    
            customerTable = nwDataSet.Customers
            customersTableAdapter.Fill(customerTable)
    
            Dim customerQuery = From customers In customerTable.AsEnumerable.Take(20) _
                    Select CustomerID = customers.Customer_ID, _
                    CustomerName = customers.Contact_Name
    
            ' Execute the query. 
            For Each item In customerQuery
                Me.ComboBox1.Items.Add(CreateRibbonDropDownItem())
    
                Me.ComboBox1.Items.Last().Label = item.CustomerID.ToString() _
                    + "|" + item.CustomerName
            Next item
    
            Me.ComboBox1.Text = Me.ComboBox1.Items.First().Label
            PopulateSalesOrderInfo()
        End Sub
    
    private void CustomerRibbon_Load(object sender, RibbonUIEventArgs e)
    {
        customerTable = nwDataSet.Customers;
        customerTableAdapter.Fill(customerTable);
    
        var customerQuery = from customers in customerTable.AsEnumerable().Take(20)
                            select new
                            {
                                CustomerID = customers.Field<string>("Customer ID"),
                                CustomerName = customers.Field<string>("Contact Name")
                            };
    
    
        // Execute the query. 
        foreach (var item in customerQuery)
        {
            this.comboBox1.Items.Add(CreateRibbonDropDownItem());
            this.comboBox1.Items.Last().Label =
            item.CustomerName + "|" + item.CustomerID.ToString();
        }
        this.comboBox1.Text = this.comboBox1.Items.First().Label;
        PopulateSalesOrderInfo();
    }
    
  9. Přidejte následující kód do třídy CustomerRibbon.Tento kód používá LINQ dotazů provádět následující úkoly:

    • Přidá do podnabídky ProductsPurchased související nabídky pro každou prodejní objednávku pro vybraného odběratele.

    • Přidá tlačítka každé podnabídky produkty související s prodejní objednávkou.

    • Každé tlačítko přidá obslužné rutiny událostí.

    Private Sub PopulateSalesOrderInfo()
    
        Dim tempArray As [String]() = comboBox1.Text.Split(New [Char]() {"|"c})
        Menu1.Items.Clear()
    
        orderTable = nwDataSet.Orders
        orderDetailsTable = nwDataSet.Order_Details
        productsTable = nwDataSet.Products
    
        ordersTableAdapter.Fill(orderTable)
        detailsTableAdapter.Fill(orderDetailsTable)
        productsTableAdapter.Fill(productsTable)
    
        Dim orderQuery = From order In orderTable.AsEnumerable() _
                         Where order.Customer_ID.ToString() = tempArray(0) _
                         Select New With {.SalesOrderID = order.Order_ID}
    
        For Each orderItem In orderQuery
            Me.Menu1.Items.Add(CreateRibbonMenu())
    
            Dim orderMenu As RibbonMenu = CType(Menu1.Items.Last(), RibbonMenu)
            orderMenu.Dynamic = True
            orderMenu.Label = orderItem.SalesOrderID.ToString()
            orderMenu.Tag = orderItem.SalesOrderID
    
            Dim productQuery = From orderDetail In orderDetailsTable.AsEnumerable(), _
                                   product In productsTable.AsEnumerable() _
                               Where orderDetail.Product_ID = _
                                   product.Product_ID _
                               And orderDetail.Order_ID = _
                               orderMenu.Tag _
            Select productName = product.Product_Name
    
            For Each productItem In productQuery
                Dim button As RibbonButton = CreateRibbonButton()
                button.Label = productItem
                orderMenu.Items.Add(button)
            Next productItem
        Next orderItem
    End Sub
    
    private void PopulateSalesOrderInfo()
    {
        String[] tempArray = comboBox1.Text.Split(new Char[] { '|' });
        menu1.Items.Clear();
    
        orderTable = nwDataSet.Orders;
        orderDetailsTable = nwDataSet.Order_Details;
        productsTable = nwDataSet.Products;
    
        ordersTableAdapter.Fill(orderTable);
        detailsTableAdapter.Fill(orderDetailsTable);
        productsTableAdapter.Fill(productsTable);
    
        var orderQuery = from orders in orderTable.AsEnumerable()
                         where orders.Field<string>("Customer ID") == tempArray[1]
                         select new { OrderID = orders.Field<int>("Order ID") };
    
        foreach (var orderItem in orderQuery)
        {
            menu1.Items.Add(CreateRibbonMenu());
    
            RibbonMenu orderMenu = (RibbonMenu)menu1.Items.Last();
            orderMenu.Dynamic = true;
            orderMenu.Label = orderItem.OrderID.ToString();
            orderMenu.Tag = orderItem.OrderID;
    
            var productQuery = from orderDetail in orderDetailsTable.AsEnumerable()
                               join product in productsTable.AsEnumerable() on
                                   orderDetail.Field<int>("Product ID")
                               equals product.Field<int>("Product ID")
                               where orderDetail.Field<int>("Order ID") ==
                                   orderItem.OrderID
                               select new { ProductName = product.Field<string>("Product Name") };
    
            foreach (var productItem in productQuery)
            {
                RibbonButton button = CreateRibbonButton();
                button.Label = productItem.ProductName;
                orderMenu.Items.Add(button);
            }
        }
    }
    
  10. V Průzkumníku, poklepejte na soubor kódu pásu karet.

    Otevře se Návrhář pásu karet.

  11. V Návrháři pásu karet, poklepejte Zákazníci pole se seznamem.

    Otevře soubor pásu kódu v editoru kódu a ComboBox1_TextChanged obslužné rutiny události se zobrazí.

  12. Nahradit ComboBox1_TextChanged obslužnou rutinu následujícím kódem.Tento kód provede následující úlohy:

    • Volání PopulateSalesOrderInfo pomocnou metodu.Tato metoda aktualizace Produkty zakoupené nabídka s prodejní objednávky, které se vztahují k vybranému odběrateli.

    • Volání PopulateMailItem pomocnou metodu a předá v aktuální text, který je název vybraného odběratele.Tato metoda se naplní To, Subject, a Body pole nové zprávy elektronické pošty.

    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);
    }
    
  13. Následující klepněte na tlačítko Přidat obslužnou rutinu události CustomerRibbon třídy.Tento kód přidá název vybrané produkty Body pole nové zprávy elektronické pošty.

    Private Sub Button_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 myButton As RibbonButton = CType(sender, RibbonButton)
        myMailItem.Subject = "Following up on your order"
        myMailItem.Body = myMailItem.Body + ControlChars.Lf + "* " _
            + myButton.Label
    End Sub
    
    void button_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Application application = Globals.ThisAddIn.Application;
        Outlook.Inspector inspector = application.ActiveInspector();
        Outlook.MailItem myMailItem = (Outlook.MailItem)inspector.CurrentItem;
        RibbonButton myCheckBox = (RibbonButton)sender;
        myMailItem.Subject = "Following up on your order";
        myMailItem.Body = myMailItem.Body + "\n" + "* " + myCheckBox.Label;
    }
    
  14. Přidejte následující kód do třídy CustomerRibbon.Tento kód provede následující úlohy:

    • Vyplní To řádku nové e-mailových zpráv pomocí e-mailovou adresu aktuálně vybraného odběratele.

    • Přidá text Subject a Body pole nové zprávy elektronické pošty.

    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) + "," _
            + 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[0] + "@example.com";
        myMailItem.Subject = "Following up on your order";
        myMailItem.Body = "Hello " + tempArray[0] + "," +
            "\n" + "We would like to get your feedback on the " +
            "following products that you recently ordered: ";
    }
    

Testování ovládacích prvků ve vlastní skupině

Při otevření nového formuláře pošty v aplikaci Outlook vlastní skupinu s názvem Nákupy zákazníka se zobrazí na zprávy kartu pásu karet.

Vytvoření zákazníka zpracování e-mailové zprávy, vyberte zákazníka a potom vyberte produkty zakoupené zákazníka.Ovládací prvky Nákupy zákazníka skupiny jsou aktualizovány v době běhu pomocí dat z databáze Northwind.

K testování ovládacích prvků ve vlastní skupině

  1. Stisknutím klávesy F5 spustit projektu.

    Spuštění aplikace Outlook.

  2. V aplikaci Outlook na soubor příkaz Novýa klepněte na tlačítko Zprávy.

    Dojde k následujícím akcím:

    • Zobrazí se okno Inspektor nové zprávy pošty.

    • Na zpráva kartu na pásu karet Nákupy zákazníka skupiny se zobrazí před schránky skupiny.

    • Zákazníci je aktualizován seznamem ve skupině s názvy Zákazníci v databázi Northwind.

  3. Na zpráva kartu pásu karet, v Nákupy zákazníka skupině, vyberte zákazníka z Zákazníci pole se seznamem.

    Dojde k následujícím akcím:

    • Produkty zakoupené nabídky aktualizována na každé prodejní objednávky vybraného odběratele.

    • Podnabídka každé prodejní objednávky je aktualizována na produkty zakoupené v uvedeném pořadí.

    • E-mailovou adresu vybraného odběratele je do na jsou naplněny řádek poštovní zprávy a Předmět poštovní zprávy s textem.

  4. Klepněte Nákup produktů nabídce přejděte na všechny prodejní objednávky a klepněte na produkt z prodejní objednávky.

    Název produktu je přidán do těla e-mailové zprávy.

Další kroky

Další informace o přizpůsobení uživatelského rozhraní sady Office z těchto témat:

Viz také

Úkoly

Postupy: Začínáme s přizpůsobením pásu karet

Návod: Vytvoření vlastní karty pomocí návrháře pásu karet

Postupy: Změna polohy karty na pásu karet

Postupy: Přizpůsobení předdefinované karty

Postupy: Přidání ovládacích prvků do zobrazení Backstage

Postupy: Export pásu karet z návrháře pásu karet do kódu XML pásu karet

Postupy: Zobrazení chyb uživatelského rozhraní doplňku

Koncepty

Přístup k pásu karet za běhu

Návrhář pásu karet

Přehled modelu objektů pásu karet

Přizpůsobení pásu karet pro aplikaci Outlook

Další zdroje

Přehled pásu karet

Dotaz integrovaný do jazyka (LINQ)