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


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

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

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

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

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

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

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

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

ПримечаниеПримечание

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

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

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

-

Выпуск Visual Studio 2012, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в разделе [Настройка компьютера для разработки решений Office](bb398242\(v=vs.110\).md).
  • Word 2013 или Word 2010.

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

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

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

  1. Создайте проект надстройки уровня приложения для 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. Перетащите элемент управления Флажок с вкладки Элементы управления ленты Office элемента управления Панель элементов в группу group1.

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

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

    Свойство

    Значение

    Имя

    addButtonCheckBox

    Метка

    Добавить кнопку

  9. Добавьте второй флажок в group1 и измените следующие свойства.

    Свойство

    Значение

    Имя

    addRichTextCheckBox

    Метка

    Добавить элемент управления текстом в формате RTF

  10. В конструкторе ленты дважды щелкните Добавить кнопку.

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

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

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

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

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

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

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

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

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

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

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

    Friend Sub ToggleButtonOnDocument()
        Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Me.Application.ActiveDocument)
    
        Dim name As String = "MyButton"
    
        If Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked Then
            Dim selection = Me.Application.Selection
            If selection IsNot Nothing AndAlso selection.Range IsNot Nothing Then
                button = vstoDocument.Controls.AddButton( _
                    selection.Range, 100, 30, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    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.Когда пользователь щелкает на ленте флажок "Добавить элемент управления текстом в формате RTF", этот метод добавляет элемент управления RichTextContentControl в текущее выделение в документе, если флажок устанавливается, или удаляет элемент управления RichTextContentControl, если флажок снимается.

    Friend Sub ToggleRichTextControlOnDocument()
    
        Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Me.Application.ActiveDocument)
    
        Dim name As String = "MyRichTextBoxControl"
    
        If Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked Then
            Dim selection = Me.Application.Selection
            If selection IsNot Nothing AndAlso selection.Range IsNot Nothing Then
                richTextControl = vstoDocument.Controls.AddRichTextContentControl( _
                        selection.Range, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    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);
        }
    }
    

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

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

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

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

    Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
        ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.DocumentBeforeSave
    
        Dim isExtended As Boolean = Globals.Factory.HasVstoObject(Doc)
    
    
        If isExtended Then
            Dim vstoDocument As Document = Globals.Factory.GetVstoObject(Doc)
    
    
            If vstoDocument.Controls.Contains(button) Then
                vstoDocument.Controls.Remove(button)
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = False
            End If
        End If
    End Sub
    
    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 добавленных на ленту флажков, чтобы добавлять элементы управления в документ и удалять их из документа.

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

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

    Private Sub addButtonCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addButtonCheckBox.Click
        Globals.ThisAddIn.ToggleButtonOnDocument()
    End Sub
    
    Private Sub addRichTextCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addRichTextCheckBox.Click
        Globals.ThisAddIn.ToggleRichTextControlOnDocument()
    End Sub
    
    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. В группе Добавить элементы управления щелкните Добавить элемент управления текстом в формате RTF.

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

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

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

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

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

См. также

Задачи

Практическое руководство. Добавление элементов управления Windows Forms в документы Office

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

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

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

Сохранение динамических элементов управления в документах Office

Расширение документов Word и книг Excel в надстройках уровня приложения во время выполнения

Другие ресурсы

Решения Word