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


Пошаговое руководство. Добавление элементов управления в документ во время выполнения в надстройке VSTO

Элементы управления можно добавить в любой открытый документ Microsoft Office Word с помощью надстройки VSTO. В этом пошаговом руководстве показано, как использовать ленту, чтобы пользователи могли добавлять или RichTextContentControl добавлять Button документ в документ.

Применимость. Информация в этой статье относится к проектам надстроек VSTO для Word 2010. Дополнительные сведения см. в разделе Доступность функций по типам приложений Office и проектов.

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

  • Создание нового проекта надстройки VSTO для Word.

  • Предоставление пользовательского интерфейса для добавления элементов управления в документ.

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

  • Удаление элементов управления из документа.

    Примечание.

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

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

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

Начнем с создания проекта надстройки VSTO для Word

Создание нового проекта надстройки VSTO для Word

  1. Создайте проект надстройки VSTO для Word с именем WordDynamicControls. Дополнительные сведения см. в статье "Практическое руководство. Создание проектов Office в Visual Studio".

  2. Добавьте ссылку на сборку Microsoft.Office.Tools.Word.v4.0.Utilities.dll . Эта ссылка потребуется для программного добавления элемента управления Windows Forms в документ далее в этом пошаговом руководстве.

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

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

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

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

  2. В диалоговом окне Добавление нового элемента выберите элемент Лента (визуальный конструктор).

  3. Измените имя новой ленты на MyRibbonи нажмите кнопку Добавить.

    В конструкторе лент откроется файл MyRibbon.cs или MyRibbon.vb ; отобразятся вкладка и группа, используемые по умолчанию.

  4. В конструкторе ленты щелкните группу group1 .

  5. В окне Свойства измените свойство Метка для group1 на Добавить элементы управления.

  6. Перетащите элемент управления CheckBox с вкладки Элементы управления ленты Officeпанели элементов в группу group1.

  7. Щелкните CheckBox1 , чтобы выбрать его.

  8. В окне Свойства измените следующие свойства.

    Свойство Значение
    Имя addButtonCheckBox
    Подпись Кнопка “Добавить”
  9. Добавьте второй флажок в group1, а затем измените следующие свойства.

    Свойство Значение
    Имя addRichTextCheckBox
    Подпись Добавление элемента управления форматированием текста
  10. В конструкторе лент дважды щелкните элемент Добавить кнопку.

    Обработчик событий Click флажка Добавить кнопку откроется в редакторе кода.

  11. Вернитесь в конструктор ленты и дважды щелкните элемент Добавить элемент управления форматированием текста.

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

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

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

В коде надстройки VSTO необходимо преобразовать активный документ в DocumentT:Microsoft.Office.Tools.Word.Document , прежде чем можно будет добавить элемент управления. В решениях Office управляемые элементы управления можно добавлять только в ведущие элементы, которые действуют как контейнеры для элементов управления. В проектах надстроек VSTO элементы узла можно создавать во время выполнения с помощью GetVstoObject метода.

Добавьте в класс ThisAddIn методы, которые могут вызываться для добавления или удаления Button или RichTextContentControl в активном документе. Далее в этом пошаговом руководстве вы будете вызывать эти методы из обработчиков событий Click флажков на ленте.

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

  1. В Обозреватель решений дважды щелкните ThisAddIn.cs или ThisAddIn.vb, чтобы открыть файл в редакторе кода.

  2. Добавьте в класс ThisAddIn приведенный далее код. Этот код объявляет объекты Button и RichTextContentControl , представляющие элементы управления, которые будут добавлены в документ.

    private Microsoft.Office.Tools.Word.Controls.Button button = null;
    private RichTextContentControl richTextControl = null;
    
  3. Добавьте приведенный ниже метод в класс ThisAddIn. Когда пользователь щелкает флажок Добавить кнопку на ленте, этот метод добавляет Button в выделенный фрагмент документа, если флажок устанавливается, или удаляет Button , если флажок снимается.

    internal void ToggleButtonOnDocument()
    {
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyButton";
    
        if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                button = vstoDocument.Controls.AddButton(
                    selection.Range, 100, 30, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    
  4. Добавьте приведенный ниже метод в класс ThisAddIn. Когда пользователь щелкает флажок Добавить элемент управления форматированием текста на ленте, этот метод добавляет RichTextContentControl в выделенный фрагмент документа, если флажок устанавливается, или удаляет RichTextContentControl , если флажок снимается.

    internal void ToggleRichTextControlOnDocument()
    {
    
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyRichTextBoxControl";
    
        if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                    selection.Range, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    

Удаление элемента управления Button при сохранении документа

Элементы управления Windows Forms не сохраняются, когда документ сохраняется, а затем закрывается. Однако оболочка ActiveX для каждого элемента управления остается в документе, и границу этой оболочки конечные пользователи могут видеть при повторном открытии документа. Существует несколько способов очистки динамически созданных элементов управления Windows Forms в надстройках VSTO. В этом пошаговом руководстве вы программно удалите Button элемент управления при сохранении документа.

Удаление элемента управления "Кнопка" при сохранении документа

  1. В файле кода ThisAddIn.cs или ThisAddIn.vb добавьте следующий метод в ThisAddIn класс. Этот метод является обработчиком событий для события DocumentBeforeSave . Если у сохраненного документа есть связанный с ним ведущий элемент Document , обработчик событий получает этот ведущий элемент и удаляет элемент управления Button , если он существует.

    private void Application_DocumentBeforeSave(Word.Document Doc, 
        ref bool SaveAsUI, ref bool Cancel)
    {
        bool isExtended = Globals.Factory.HasVstoObject(Doc);
    
    
        if (isExtended)
        {
    
            Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Doc);
    
            if (vstoDocument.Controls.Contains(button))
            {
                vstoDocument.Controls.Remove(button);
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
            }
        }
    }
    
  2. В C# добавьте в обработчик событий ThisAddIn_Startup следующий код. Этот код требуется в C# для подключения обработчика событий Application_DocumentBeforeSave к событию DocumentBeforeSave .

    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
    

Добавление и удаление элементов управления, когда пользователь щелкает поля проверка на ленте

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

Добавление или удаление элементов управления, когда пользователь щелкает поля проверка на ленте

  1. В файле кода MyRibbon.cs или MyRibbon.vb замените созданные addButtonCheckBox_Click и addRichTextCheckBox_Click обработчики событий следующим кодом. Этот код переопределяет данные обработчики событий, задавая вызов методов ToggleButtonOnDocument и ToggleRichTextControlOnDocument , которые вы добавили в класс ThisAddIn ранее в этом пошаговом руководстве.

    private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleButtonOnDocument();
    }
    
    private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleRichTextControlOnDocument();
    }
    

Тестирование решения

Добавьте элементы управления в документ, выбрав их в настраиваемой вкладке на ленте. При сохранении документа элемент управления Button удаляется.

Тестирование решения

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

  2. В активном документе нажмите клавишу ВВОД несколько раз, чтобы добавить в документ новые пустые абзацы.

  3. Выделите первый абзац.

  4. Перейдите на вкладку Надстройки .

  5. В группе Добавить элементы управления щелкните Добавить кнопку.

    В первом абзаце появляется кнопка.

  6. Выделите последний абзац.

  7. В группе Добавить элементы управления щелкните Добавить элемент управления форматированием текста.

    В последний абзац добавляется элемент управления форматированием текста.

  8. Сохраните документ.

    Кнопка удаляется из документа.

Следующие шаги

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