Udostępnij za pośrednictwem


Przewodnik: aktualizowanie kontrolek na wstążce w czasie wykonywania

W tym przewodniku pokazano, jak za pomocą modelu obiektów wstążki zaktualizować kontrolki na wstążce po załadowaniu wstążki do aplikacja pakietu Office licacji.

Dotyczy: informacje w tym temacie dotyczą projektów na poziomie dokumentu i projektów dodatków VSTO dla następujących aplikacji: Excel; InfoPath 2013 i InfoPath 2010; Programu outlook; Powerpoint; Projektu; Visio; Word. Aby uzyskać więcej informacji, zobacz Funkcje dostępne przez aplikacja pakietu Office lication i typ projektu.

Przykład ściąga dane z przykładowej bazy danych Northwind, aby wypełnić pole kombi i menu w programie Microsoft Office Outlook. Elementy wybrane w tych kontrolkach automatycznie wypełniają pola, takie jak Do i Temat w wiadomości e-mail.

W instruktażu przedstawiono następujące zagadnienia:

  • Utwórz nowy projekt dodatku programu Outlook VSTO.

  • Projektowanie niestandardowej grupy wstążki.

  • Dodaj grupę niestandardową do wbudowanej karty.

  • Zaktualizuj kontrolki na wstążce w czasie wykonywania.

Uwaga

Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE programu Visual Studio.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

Tworzenie nowego projektu dodatku programu Outlook VSTO

Najpierw utwórz projekt dodatku VSTO programu Outlook.

Aby utworzyć nowy projekt dodatku programu Outlook VSTO

  1. W programie Visual Studio utwórz projekt dodatku VSTO programu Outlook o nazwie Ribbon_Update_At_Runtime.

  2. W oknie dialogowym Nowy projekt wybierz pozycję Utwórz katalog dla rozwiązania.

  3. Zapisz projekt w domyślnym katalogu projektu.

    Aby uzyskać więcej informacji, zobacz How to: Create Office projects in Visual Studio (Jak tworzyć projekty pakietu Office w programie Visual Studio).

Projektowanie niestandardowej grupy wstążki

Wstążka dla tego przykładu będzie wyświetlana, gdy użytkownik komponuje nową wiadomość e-mail. Aby utworzyć grupę niestandardową dla wstążki, najpierw dodaj element wstążki do projektu, a następnie zaprojektuj grupę w Projektant wstążki. Ta grupa niestandardowa ułatwia generowanie kolejnych wiadomości e-mail dla klientów przez ściąganie nazw i historii zamówień z bazy danych.

Aby zaprojektować grupę niestandardową

  1. W menu Project (Projekt) kliknij pozycję Add New Item (Dodaj nowy element).

  2. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Wstążka (Visual Projektant).

  3. Zmień nazwę nowej wstążki na CustomerRibbon, a następnie kliknij przycisk Dodaj.

    Plik CustomerRibbon.cs lub CustomerRibbon.vb zostanie otwarty w Projektant wstążki i wyświetli domyślną kartę i grupę.

  4. Kliknij Projektant wstążki, aby ją zaznaczyć.

  5. W oknie Właściwości kliknij strzałkę listy rozwijanej obok właściwości RibbonType, a następnie kliknij pozycję Microsoft.Outlook.Mail.Compose.

    Dzięki temu wstążka będzie wyświetlana, gdy użytkownik komponuje nową wiadomość e-mail w programie Outlook.

  6. W Projektant wstążki kliknij pozycję Grupa1, aby ją zaznaczyć.

  7. W oknie Właściwości ustaw wartość Etykieta na Zakup klienta.

  8. Na karcie Kontrolki wstążki pakietu Office przybornika przeciągnij pole ComboBox do grupy Zakupy klienta.

  9. Kliknij pozycję ComboBox1 , aby go zaznaczyć.

  10. W oknie Właściwości ustaw wartość Etykieta na Klienci.

  11. Na karcie Kontrolki wstążki pakietu Office przybornika przeciągnij menu do grupy Zakupy klienta.

  12. W oknie Właściwości ustaw wartość Etykieta na Kupiony produkt.

  13. Ustaw wartość Dynamic na true.

    Dzięki temu można dodawać i usuwać kontrolki w menu w czasie wykonywania po załadowaniu wstążki do aplikacja pakietu Office licacji.

Dodawanie grupy niestandardowej do wbudowanej karty

Wbudowana karta to karta, która znajduje się już na wstążce Eksploratora programu Outlook lub Inspektora. W tej procedurze dodasz grupę niestandardową do wbudowanej karty, a następnie określisz pozycję grupy niestandardowej na karcie.

Aby dodać grupę niestandardową do wbudowanej karty

  1. Kliknij kartę TabAddins (Wbudowane), aby ją wybrać.

  2. W oknie Właściwości rozwiń właściwość ControlId, a następnie ustaw wartość OfficeId na TabNewMailMessage.

    Spowoduje to dodanie grupy Zakupy klienta do karty Wiadomości na wstążce, która zostanie wyświetlona w nowej wiadomości e-mail.

  3. Kliknij grupę Zakupy klienta, aby ją wybrać.

  4. W oknie Właściwości rozwiń właściwość Position, kliknij strzałkę listy rozwijanej obok właściwości PositionType, a następnie kliknij przycisk BeforeOfficeId.

  5. Ustaw właściwość OfficeId na GroupClipboard.

    Spowoduje to pozycje grupy Zakupy klienta przed grupą Schowek na karcie Komunikaty.

Utwórz źródło danych

Użyj okna Źródła danych, aby dodać typowany zestaw danych do projektu.

Aby utworzyć źródło danych

  1. W menu Dane kliknij pozycję Dodaj nowe źródło danych.

    Spowoduje to uruchomienie Kreatora konfiguracji źródła danych.

  2. Wybierz pozycję Baza danych, a następnie kliknij przycisk Dalej.

  3. Wybierz pozycję Zestaw danych, a następnie kliknij przycisk Dalej.

  4. Wybierz połączenie danych z przykładową bazą danych Northwind Microsoft SQL Server Compact 4.0 lub dodaj nowe połączenie przy użyciu przycisku Nowy Połączenie ion.

  5. Po wybraniu lub utworzeniu połączenia kliknij przycisk Dalej.

  6. Kliknij przycisk Dalej, aby zapisać parametry połączenia.

  7. Na stronie Wybieranie obiektów bazy danych rozwiń węzeł Tabele.

  8. Zaznacz pole wyboru obok każdej z następujących tabel:

    1. Klienci

    2. Szczegóły zamówienia

    3. Zamówienia

    4. Produkty

  9. Kliknij przycisk Zakończ.

Aktualizowanie kontrolek w grupie niestandardowej w czasie wykonywania

Użyj modelu obiektów wstążki, aby wykonać następujące zadania:

  • Dodaj nazwy klientów do pola kombi Klienci .

  • Dodaj kontrolki menu i przycisków do menu Produkty zakupione , które reprezentują zamówienia sprzedaży i sprzedane produkty.

  • Wypełnij pola Do, Temat i Treść nowych wiadomości e-mail przy użyciu danych z pola kombi Klienci i menu Produkty zakupione .

Aby zaktualizować kontrolki w grupie niestandardowej przy użyciu modelu obiektów wstążki

  1. W menu Project (Projekt) kliknij pozycję Add Reference (Dodaj odwołanie).

  2. W oknie dialogowym Dodawanie odwołania kliknij kartę .NET, wybierz zestaw System.Data.Linq, a następnie kliknij przycisk OK.

    Ten zestaw zawiera klasy do używania zapytań zintegrowanych z językiem (LINQ). Użyjesz linQ, aby wypełnić kontrolki w grupie niestandardowej danymi z bazy danych Northwind.

  3. W Eksplorator rozwiązań kliknij pozycję CustomerRibbon.cs lub CustomerRibbon.vb, aby go wybrać.

  4. W menu Widok kliknij pozycję Kod.

    Plik kodu wstążki zostanie otwarty w Edytorze kodu.

  5. Dodaj następujące instrukcje w górnej części pliku kodu wstążki. Te instrukcje zapewniają łatwy dostęp do przestrzeni nazw LINQ i przestrzeni nazw podstawowego zestawu międzyoperacyjności programu Outlook (PIA).

    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. Dodaj następujący kod wewnątrz CustomerRibbon klasy . Ten kod deklaruje tabelę danych i karty tabel, które będą używane do przechowywania informacji z tabel Customer, Orders, Order Details i Product bazy danych Northwind.

    //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. Dodaj następujący blok kodu do CustomerRibbon klasy . Ten kod dodaje trzy metody pomocnicze, które tworzą kontrolki dla wstążki w czasie wykonywania.

    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. Zastąp metodę CustomerRibbon_Load obsługi zdarzeń następującym kodem. Ten kod używa zapytania LINQ do wykonywania następujących zadań:

    • Wypełnij pole kombi Klienci przy użyciu identyfikatora i nazwy 20 klientów w bazie danych Northwind.

    • Wywołuje metodę PopulateSalesOrderInfo pomocnika. Ta metoda aktualizuje menu ProductsPurchased z numerami zamówień sprzedaży odnoszącymi się do aktualnie wybranego klienta.

      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. Dodaj poniższy kod do klasy CustomerRibbon. Ten kod używa zapytań LINQ do wykonywania następujących zadań:

    • Dodaje podmenu do menu ProductsPurchased dla każdego zamówienia sprzedaży powiązanego z wybranym klientem.

    • Dodaje przyciski do każdego podmenu dla produktów powiązanych z zamówieniem sprzedaży.

    • Dodaje programy obsługi zdarzeń do każdego przycisku.

      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. W Eksplorator rozwiązań kliknij dwukrotnie plik kodu wstążki.

    Zostanie otwarta Projektant wstążki.

  11. W Projektant wstążki kliknij dwukrotnie pole kombi Klienci.

    Plik kodu wstążki zostanie otwarty w Edytorze kodu, a zostanie wyświetlona procedura obsługi zdarzeń ComboBox1_TextChanged .

  12. Zastąp ComboBox1_TextChanged program obsługi zdarzeń następującym kodem. Ten kod wykonuje następujące zadania:

    • Wywołuje metodę PopulateSalesOrderInfo pomocnika. Ta metoda aktualizuje menu Produkty zakupione przy użyciu zamówień sprzedaży powiązanych z wybranym klientem.

    • Wywołuje metodę PopulateMailItem pomocnika i przekazuje bieżący tekst, który jest wybraną nazwą klienta. Ta metoda wypełnia pola Do, Temat i Treść nowych wiadomości e-mail.

      private void comboBox1_TextChanged(object sender,
          RibbonControlEventArgs e)
      {
          PopulateSalesOrderInfo();
          PopulateMailItem(comboBox1.Text);
      }
      

  13. Dodaj następującą Click procedurę CustomerRibbon obsługi zdarzeń do klasy . Ten kod dodaje nazwę wybranych produktów do pola Treść nowych wiadomości e-mail.

    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. Dodaj poniższy kod do klasy CustomerRibbon. Ten kod wykonuje następujące zadania:

    • Wypełnia wiersz Do nowych wiadomości e-mail przy użyciu adresu e-mail aktualnie wybranego klienta.

    • Dodaje tekst do pól Temat i Treść nowych wiadomości e-mail.

      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: ";
      }
      

Testowanie kontrolek w grupie niestandardowej

Po otwarciu nowego formularza poczty w programie Outlook na karcie Wiadomości na wstążce zostanie wyświetlona grupa niestandardowa o nazwie Zakupy klienta.

Aby utworzyć wiadomość e-mail z monitem klienta, wybierz klienta, a następnie wybierz produkty zakupione przez klienta. Kontrolki w grupie Zakupy klienta są aktualizowane w czasie wykonywania przy użyciu danych z bazy danych Northwind.

Aby przetestować kontrolki w grupie niestandardowej

  1. Naciśnij klawisz F5 , aby uruchomić projekt.

    Rozpoczyna się program Outlook.

  2. W programie Outlook w menu Plik wskaż pozycję Nowy, a następnie kliknij pozycję Wiadomość e-mail.

    Występują następujące akcje:

    • Zostanie wyświetlone nowe okno Inspektor wiadomości e-mail.

    • Na karcie Komunikat na wstążce grupa Zakupy klienta zostanie wyświetlona przed grupą Schowek.

    • Pole kombi Klienci w grupie jest aktualizowane przy użyciu nazw klientów w bazie danych Northwind.

  3. Na karcie Komunikat na wstążce w grupie Zakupy klienta wybierz klienta w polu kombi Klienci.

    Występują następujące akcje:

    • Menu Produkty zakupione zostało zaktualizowane, aby wyświetlić każde zamówienie sprzedaży wybranego klienta.

    • Każdy podmenu zamówienia sprzedaży jest aktualizowany w celu wyświetlenia produktów zakupionych w tej kolejności.

    • Adres e-mail wybranego klienta jest dodawany do wiersza Do wiadomości e-mail, a temat i treść wiadomości e-mail są wypełniane tekstem.

  4. Kliknij menu Zakupy produktów, wskaż dowolne zamówienie sprzedaży, a następnie kliknij produkt z zamówienia sprzedaży.

    Nazwa produktu jest dodawana do treści wiadomości e-mail.

Następne kroki

Więcej informacji na temat dostosowywania interfejsu użytkownika pakietu Office można znaleźć w następujących tematach:

  • Dodaj interfejs użytkownika oparty na kontekście do dowolnego dostosowania na poziomie dokumentu. Aby uzyskać więcej informacji, zobacz Omówienie okienka akcji.

  • Rozszerzanie standardowego lub niestandardowego formularza programu Microsoft Office Outlook. Aby uzyskać więcej informacji, zobacz Przewodnik: projektowanie regionu formularza programu Outlook.

  • Dodaj niestandardowe okienko zadań do programu Outlook. Aby uzyskać więcej informacji, zobacz Niestandardowe okienka zadań.