Поделиться через


Пошаговое руководство. Изменение панели действий в зависимости от контекста пользователя

Обновлен: Ноябрь 2007

Применение

Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Word 2007

  • Word 2003

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

В этом пошаговом руководстве показано, как следует реагировать на события XMLNode. Когда пользователь перемещает курсор по документу, элементы управления в панели действия скрываются или становятся видимыми.

В этом пошаговом руководстве рассматриваются следующие задачи:

  • Добавление элементов управления на панель действий.

  • Отображение панели действий при открытии приложения.

  • Скрытие и отображение элементов управления в панели действий на основе действий пользователя в XML-узлах.

zbxt1ax4.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Обязательные компоненты

Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты.

  • Visual Studio Tools for Office (необязательный компонент Visual Studio 2008 Professional и Visual Studio Team System).

  • Microsoft Office Word 2003.

zbxt1ax4.alert_note(ru-ru,VS.90).gifПримечание.

Это руководство можно также выполнять с использованием Word 2007, однако некоторые команды подразумевают применение меню Word 2003.

Visual Studio Tools for Office устанавливается по умолчанию с перечисленными версиями Visual Studio. Чтобы проверить, установлен ли данный пакет инструментов, см. раздел Установка средств Visual Studio для Office.

Создание проекта

Вначале следует создать проект документа Word.

Создание нового проекта

Создание схемы для сопоставления с документом

Чтобы создать XML-узлы, перетащите элементы из схемы XML в документ. Сначала создайте файл схемы, затем создайте документ, соответствующий схеме, и сопоставьте элементы с документом.

Создание схемы XML

  1. Выберите в Обозревателе решений проект My Dynamic Actions Pane.

  2. В меню Проект выберите команду Добавить новый элемент.

    Открывается диалоговое окно Добавление нового элемента.

  3. Затем в области Шаблоны выберите Схема XML.

  4. Назовите схему ActionsPaneSample.xsd и нажмите кнопку Добавить.

  5. В Обозревателе решений щелкните правой кнопкой мыши ActionsPaneSample.xsd и выберите команду Открыть с помощью.

  6. В диалоговом окне Открыть с помощью выберите Редактор XML и нажмите кнопку ОК.

  7. Замените текст в редакторе XML на следующий.

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="https://schemas.microsoft.com/vsto/samples" elementFormDefault="qualified"
        xmlns="https://schemas.microsoft.com/vsto/samples"
        xmlns:mstns="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Sample" type="SampleType"></xs:element>
      <xs:complexType name="SampleType">
        <xs:all>
          <xs:element name="Insert" type="InsertType" minOccurs="0" maxOccurs="1" />
          <xs:element name="Table" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:all>
      </xs:complexType>
      <xs:complexType name="InsertType">
        <xs:sequence>
          <xs:element name="MemoTo" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoFrom" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="MemoSubject" type="xs:string" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
    
  8. Сохраните проект.

Добавление текста и кода XML к документу

Документ для данного пошагового руководства представлен в форме меморандума. Добавьте текст в документ и затем сопоставьте XML-элементы с местами в документе.

Добавление текста в документ

  1. В Обозревателе решений щелкните правой кнопкой мыши файл ThisDocument.vb или ThisDocument.cs и выберите из контекстного меню команду Открыть в конструкторе.

  2. Добавьте следующий текст в документ Word.

    МЕМОРАНДУМ

    Кому:

    От:

    Тема:

    В следующей таблице представлены контактные данные по вашему запросу:

    Имя

    Адрес

    Город

    Область (штат)

    Почтовый индекс

    Нэнси Даволио

    507 - 20th Ave. E., Apt. / 20-я Восточная Авеню, 507, кв. 2A

    Сиэтл

    Вашингтон

    98122

Затем сопоставьте XML-элементы с текстом в меморандуме. Для каждого сопоставленного XML-элемента создается элемент управления XMLNode. Имя элемента управления XMLNode образуется путем добавления имени родительского и дочернего элемента к слову Node. Например, при сопоставлении элемента Insert из схемы, указанной выше, его имя будет SampleInsertNode. Дополнительные сведения об элементах управления см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.

Добавление схемы в документ

  1. Откройте диалоговое окно Шаблоны и надстройки. Для этого в Word 2007 необходимо выполнить следующее:

    1. Открыть на ленте вкладку Разработчик.

      zbxt1ax4.alert_note(ru-ru,VS.90).gifПримечание.

      Если вкладка Разработчик не отображается на ленте, ее следует отобразить вручную. Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.

    2. В группе XML нажмите кнопку Схема.

      Появится диалоговое окно Шаблоны и надстройки.

    Для открытия диалогового окна Шаблоны и надстройки в Word 2003:

    1. В меню Инструменты наведите указатель мыши на пункт Инструменты Microsoft Office Word, после чего выберите Шаблоны и надстройки.

      Появится диалоговое окно Шаблоны и надстройки.

      zbxt1ax4.alert_note(ru-ru,VS.90).gifПримечание.

      Если в меню Сервис недоступна команда Средства Microsoft Office Word, щелкните документ, чтобы установить в него фокус. Дополнительные сведения см. в разделе Общие сведения о работе с меню Office в среде Visual Studio.

  2. В диалоговом окне Шаблоны и надстройки перейдите на вкладку Схема XML и выберите Добавление схемы.

  3. Найдите схему ActionsPaneSample.xsd, созданную ранее и расположенную в папке проекта, и нажмите Открыть.

  4. В диалоговом окне Параметры схемы нажмите кнопку ОК.

  5. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Шаблоны и надстройки.

    Открывается область задач Структура ХML.

Сопоставление XML-элементов с документом

  1. Выберите элемент Sample в области задач Структура ХML.

  2. Когда появится запрос на подтверждение, нажмите кнопку Применить ко всему документу.

  3. Выберите три строки текста К, От и Тема, и выберите элемент Insert в области задач Структура XML.

  4. Разместите курсор после К:, дважды нажмите клавишу TAB и выберите элемент MemoTo, в который следует вставить текст.

  5. Разместите курсор после От:, дважды нажмите клавишу TAB и выберите элемент MemoFrom.

  6. Разместите курсор после Тема:, дважды нажмите клавишу TAB и выберите элемент MemoSubject.

  7. Выберите таблицу полностью и выберите элемент Таблица.

    XML-теги появятся в ячейках таблицы.

  8. Снимите флажок Показывать XML-теги в документе.

  9. Нажмите кнопку Параметры XML внизу области задач Структура XML.

  10. Установите флажок Игнорировать смешанное содержимое и нажмите кнопку ОК.

  11. Закройте область задач Структура ХML.

Добавление элементов управления на панель действий

Для разработки структуры элементов управления панели действий используется элемент управления панели действий, по сути — такой же как пользовательский элемент управления. Можно перетаскивать на элемент управления панели действий другие элементы, например, кнопки и текстовые поля, а затем и упорядочивать их. Для изменения панели действий в зависимости от контекста пользователя следует добавить и разработать элемент управления панели действия для каждого контекста, а затем показывать его или скрывать соответствующим образом.

В этом пошаговом руководстве используются три элемента управления панели действий. Первый элемент содержит три текстовых поля и кнопку, благодаря чему пользователь может вводить данные и добавлять их в документ. Второй элемент содержит кнопку, открывающую диалоговое окно Свойства таблицы. Третий элемент управления содержит флажок, с помощью которого можно отобразить все элементы управления в панели действий в независимости от того, где находится курсор в документе.

Добавление элемента управления панели действий

  1. Выберите в Обозревателе решений проект My Dynamic Actions Pane.

  2. В меню Проект выберите команду Добавить новый элемент.

  3. В диалоговом окне Добавление нового элемента выберите Элемент управления панели действий, дайте файлу имя AddTextControl и нажмите кнопку Добавить.

  4. Измените свойство Size элемента управления панели действий на 170, 135.

Добавление элементов управления Windows Forms в первый элемент управления панели действий

  1. Перетащите элемент управления Label из вкладки Windows FormsПанели элементов на элемент AddTextControl и измените свойство Text на К:.

  2. Добавьте элемент управления TextBox в AddTextControl и измените следующие свойства.

    Свойство

    Значение

    Имя

    toBox

    Размер

    110, 20

  3. Добавьте второй элемент управления Label в AddTextControl и измените значение свойства Text на От:.

  4. Добавьте второй элемент управления TextBox в AddTextControl и измените следующие свойства.

    Свойство

    Значение

    Имя

    fromBox

    Размер

    110, 20

  5. Добавьте третий элемент управления Label в AddTextControl под предыдущим текстовым полем и измените значение свойства Text на Тема:.

  6. Добавьте третий элемент управления TextBox в AddTextControl рядом с предыдущей меткой и измените следующие свойства.

    Свойство

    Значение

    Имя

    subjectBox

    Multiline

    True

    Размер

    110, 40

  7. Измените размер текстового поля subjectBox так, чтобы была возможность использовать несколько строк.

  8. Добавьте элемент управления Button в AddTextControl и измените следующие свойства.

    Свойство

    Значение

    Имя

    insertText

    Текст

    Insert

Создание второго элемента управления панели действий

  1. Добавьте элемент управления панели действий в проект и назовите его ShowPropertiesControl.

  2. Измените значение свойства Size элемента управления панели действий на 170, 50.

  3. Перетащите элемент управления Button из вкладки Windows FormsПанели элементов на элемент ShowPropertiesControl и измените следующие свойства.

    Свойство

    Значение

    Имя

    tableProperties

    Текст

    Table Properties

    Включено

    False

    Размер

    100, 23

  4. Для C# измените значение свойства Modifiers кнопки на Internal.

Создание третьего элемента управления панели действий

  1. Добавьте третий элемент управления панели действий в проект и назовите его ShowAllControl.

  2. Измените свойство Size элемента управления панели действий на 170, 75.

  3. Из вкладки Windows FormsПанели элементов добавьте элемент управления GroupBox на элемент ShowAllControl и измените значение свойства Text на Моя панель действий.

  4. Добавьте элемент управления CheckBox в ShowAllControl вверху группы и измените следующие свойства.

    Свойство

    Значение

    Имя

    showCheck

    Текст

    Показать все элементы управления

  5. Для C# измените значение свойства Modifiers флажка на Internal.

Добавление кода для реагирования на контекст пользователя

Теперь можно написать код, отображающий панель действий и добавляющий или удаляющий элементы управления панели действий в зависимости от расположения курсора в документе. Код располагается в обработчиках событий элементов управления XMLNode.

Добавление кода в события элемента управления XMLNode

  1. В Обозревателе решений щелкните правой кнопкой мыши файл ThisDocument.vb или ThisDocument.cs и выберите из контекстного меню команду Перейти к коду.

  2. Создайте ссылку на переменную для каждого элемента управления панели действий в разделе объявлений ThisDocument.

    Dim addText As New AddTextControl
    Dim showProperties As New ShowPropertiesControl
    Dim showAll As New ShowAllControl
    
    Friend WithEvents showCheck As System.Windows.Forms.CheckBox
    
    private AddTextControl addText = new AddTextControl();
    private ShowPropertiesControl showProperties = new ShowPropertiesControl();
    private ShowAllControl showAll = new ShowAllControl();
    
  3. Чтобы добавить элемент управления ShowAllControl и отобразить панель действий, добавьте следующий код в обработчик событий Startup класса ThisDocument.

    Me.ActionsPane.Controls.Add(showAll)
    showCheck = showAll.showCheck
    
    this.ActionsPane.Controls.Add(showAll);
    
    zbxt1ax4.alert_note(ru-ru,VS.90).gifПримечание.

    Последовательность добавления элементов управления определяет их расположение. Если есть элемент, который всегда должен быть видимым сверху панели действий, его нужно добавить первым. Порядок также зависит от значения свойства StackOrder панели действий. Дополнительные сведения см. в разделе Практическое руководство. Управление структурой элементов управления в панели действий.

  4. Добавьте следующий код в обработчик событий ContextEnter элемента управления SampleInsertNode.

    Private Sub SampleInsertNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void SampleInsertNode_ContextEnter(object sender, 
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  5. Добавьте следующий код в обработчик событий ContextLeave элемента управления SampleInsertNode, чтобы скрыть элемент управления после того, как пользователь переместит курсор за пределы XML-узла.

    Private Sub SampleInsertNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleInsertNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
        End If
    End Sub
    
    private void SampleInsertNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
        }
    }
    
  6. Добавьте следующий код в обработчик событий ContextEnter элемента управления SampleTableNode.

    Private Sub SampleTableNode_ContextEnter(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextEnter
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = True
    End Sub
    
    private void SampleTableNode_ContextEnter(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        showProperties.tableProperties.Enabled = true;
    }
    
  7. Добавьте следующий код в обработчик событий ContextLeave элемента управления SampleTableNode, чтобы скрыть элемент управления после того, как пользователь переместит курсор за пределы XML-узла.

    Private Sub SampleTableNode_ContextLeave(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ContextChangeEventArgs) _
        Handles SampleTableNode.ContextLeave
    
        If showAll.showCheck.Checked = False Then
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    
        showProperties.tableProperties.Enabled = False
    End Sub
    
    private void SampleTableNode_ContextLeave(object sender,
        Microsoft.Office.Tools.Word.ContextChangeEventArgs e)
    {
        if (showAll.showCheck.Checked == false)
        {
            this.ActionsPane.Controls.Remove(showProperties);
        }
        showProperties.tableProperties.Enabled = false;
    }
    
  8. В C# также необходимо добавить обработчики событий для элементов управления XMLNode. Этот код можно поместить в обработчик событий Startup класса ThisDocument. Дополнительные сведения о создании обработчиков событий см. в разделе Практическое руководство. Создание обработчиков событий в пакете инструментов Visual Studio для Office.

    this.SampleInsertNode.ContextEnter += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextEnter);
    
    this.SampleInsertNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleInsertNode_ContextLeave);
    
    this.SampleTableNode.ContextEnter += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextEnter);
    
    this.SampleTableNode.ContextLeave += new Microsoft.Office.Tools.Word.
        ContextChangeEventHandler(SampleTableNode_ContextLeave);
    

Контрольная точка

Сохраните проект и убедитесь, что элементы управления панели действий изменяются при перемещении курсора по документу.

Проверка проекта

  1. Нажмите клавишу F5 для запуска проекта.

  2. Переместите точку вставки к слову К, чтобы проверить, что элемент управления addText виден в панели действий.

  3. Переместите точку вставки внутрь таблицы, чтобы проверить, что элемент управления showProperties виден в панели действий.

  4. Переместите точку вставки к слову МЕМОРАНДУМ, чтобы проверить, что оба элемента управления addText и showProperties не видны в панели действий.

Добавление кода для реакции на события элементов управления панели действий

Пока элементы управления в панели действий ничего не делают. Последним шагом является написание кода, который будет отображать все элементы управления, вставлять текст и открывать диалоговое окно Свойства таблицы.

Отображение всех элементов управления в панели действий

  1. Добавьте следующий код к ThisDocument.

    Private Sub showCheck_CheckStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles showCheck.CheckStateChanged
    
        If showAll.showCheck.Checked = True Then
            Me.ActionsPane.Controls.Add(addText)
            Me.ActionsPane.Controls.Add(showProperties)
        Else
            Me.ActionsPane.Controls.Remove(addText)
            Me.ActionsPane.Controls.Remove(showProperties)
        End If
    End Sub
    
    private void showCheck_CheckStateChanged(object sender, EventArgs e)
    {
        if (showAll.showCheck.Checked)
        {
            this.ActionsPane.Controls.Add(addText);
            this.ActionsPane.Controls.Add(showProperties);
        }
        else
        {
            this.ActionsPane.Controls.Remove(addText);
            this.ActionsPane.Controls.Remove(showProperties);
        }
    }
    
  2. В C# также необходимо добавить обработчик событий для элемента управления checkbox. Этот код можно поместить в обработчик событий Startup класса ThisDocument.

    showAll.showCheck.CheckStateChanged += new EventHandler(showCheck_CheckStateChanged);
    

Вставка текста при нажатии кнопки "Insert"

  1. В Обозревателе решений щелкните правой кнопкой мыши файл AddTextControl.cs или AddTextControl.vb и выберите из контекстного меню команду Перейти к коду.

  2. В обработчик событий Click кнопки insertText добавьте следующий код.

    Private Sub insertText_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles insertText.Click
    
        With Globals.ThisDocument
            .InsertMemoFromNode.Text = Me.fromBox.Text
            .InsertMemoToNode.Text = Me.toBox.Text
            .InsertMemoSubjectNode.Text = Me.subjectBox.Text
        End With
    
        ' Clear the text boxes.
        Me.fromBox.Text = ""
        Me.toBox.Text = ""
        Me.subjectBox.Text = ""
    End Sub
    
    private void insertText_Click(object sender, System.EventArgs e)
    {
        Globals.ThisDocument.InsertMemoFromNode.Text = this.fromBox.Text;
        Globals.ThisDocument.InsertMemoToNode.Text = this.toBox.Text;
        Globals.ThisDocument.InsertMemoSubjectNode.Text = this.subjectBox.Text;
    
        // Clear the text boxes.
        this.fromBox.Text = "";
        this.toBox.Text = "";
        this.subjectBox.Text = "";
    }
    
  3. В C# также необходимо добавить обработчик событий для кнопки. Этот код можно поместить в конструктор AddTextControl после обращения к InitializeComponent.

    public AddTextControl()
    {
        InitializeComponent();
        this.insertText.Click += new System.EventHandler(this.insertText_Click);
    }
    

Отображение диалогового окна "Свойства таблицы"

  1. В Обозревателе решений щелкните правой кнопкой мыши ShowPropertiesControl.vb или ShowPropertiesControl.cs и выберите в контекстном меню команду Перейти к коду.

  2. В обработчик событий Click кнопки tableProperties добавьте следующий код.

    Private Sub tableProperties_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles tableProperties.Click
    
        Globals.ThisDocument.Application.Dialogs( _
            Word.WdWordDialog.wdDialogTableProperties).Show()
    End Sub
    
    private void tableProperties_Click(object sender, System.EventArgs e)
    {
        object timeout = 0;
    
        Globals.ThisDocument.Application.Dialogs[
            Microsoft.Office.Interop.Word.WdWordDialog.wdDialogTableProperties]
                .Show(ref timeout);
    }
    
  3. В C# также необходимо добавить обработчик событий для кнопки. Этот код можно поместить в конструктор ShowPropertiesControl после обращения к InitializeComponent.

    public ShowPropertiesControl()
    {
        InitializeComponent();
        this.tableProperties.Click += new System.EventHandler(this.tableProperties_Click);
    }
    

Чтобы проверить работу приложения

Теперь можно протестировать документ, чтобы проверить функциональность элементов управления панели действий.

Проверка документа

  1. Нажмите клавишу F5 для запуска проекта.

  2. Убедитесь, что панель действий отображается.

  3. Переместите курсор в раздел документа, содержащий строки К, От и Тема и убедитесь, что элементы управления addText появляются в панели действий.

  4. Введите текст в полях К, От и Тема в панели действий и нажмите кнопку Вставить.

  5. Переместите курсор в таблицу и убедитесь, что элементы управления showProperties появляются в панели действий.

  6. Нажмите кнопку Свойства таблицы и убедитесь, что открывается диалоговое окно Свойства таблицы.

  7. Установите флажок Показать все и убедитесь, что в панели действий отображаются все элементы управления.

  8. Переместите курсор за пределы таблицы и убедитесь, что кнопка Свойства таблицы отключается.

Следующие действия

В этом пошаговом руководстве рассматриваются основные принципы изменения панели действий на основе контекста пользователя. Далее будут рассмотрены следующие задачи.

См. также

Задачи

Практическое руководство. Добавление панели действий в документы Word

Практическое руководство. Добавление панели действий в книги Excel

Практическое руководство. Управление структурой элементов управления в панели действий

Основные понятия

Общие сведения о панели действий

Элемент управления XMLNodes