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


Пошаговое руководство. Создание контекстного меню для закладок

Это пошаговое руководство демонстрирует, как создавать контекстные меню для элементов управления Bookmark в настройках на уровне документа для Word.Когда пользователь щелкает правой кнопкой мыши текст в закладке, появляется контекстное меню, содержащее параметры для форматирования текста.

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

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

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

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

  • Добавление команд в контекстное меню.

  • Форматирование текста в закладке.

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

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

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

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

-

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

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

Сначала следует создать проект документа Word в Visual Studio.

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

  • Создайте проект документа Word с именем "Мое контекстное меню закладок".Выберите в мастере Создать новый документ.Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Office в Visual Studio.

    Visual Studio откроет новый документ Word в режиме конструктора и добавит проект Мое контекстное меню закладок в Обозреватель решений.

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

Добавьте текст в документ, а затем добавьте 2 перекрывающиеся закладки.

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

  • В документе, который отображается в конструкторе проекта, введите следующий текст.

    Это пример создания контекстного меню, появляющегося при щелчке правой кнопкой мыши текста закладки.

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

  1. В Панель элементов из вкладки Элементы управления Word, перетащите элемент управления Bookmark в документ.

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

  2. Выберите слова "создание контекстного меню, когда вы щелкнули правой кнопкой мыши текст" и нажмите кнопку ОК.

    В документ добавляется bookmark1.

  3. Добавьте другой элемент управления Bookmark к словам "щелкните правой кнопкой мыши текст в закладке".

    В документ добавляется bookmark2.

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

    Слова "щелкните правой кнопкой мыши текст" как в bookmark1, так и в bookmark2.

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

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

Добавьте кнопки в контекстное меню, которое появляется при нажатии правой кнопкой мыши документ.

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

  1. Добавьте элемент Xml-ленты в проект.Дополнительные сведения см. в разделе Практическое руководство. Работа с настройкой ленты.

  2. В Обозреватель решений выберите ThisDocument.cs или ThisDocument.vb.

  3. В строке меню выберите Вид, Код.

    Файл класса ThisDocument открывается в редакторе кода.

  4. Добавьте следующий код в класс ThisDocument.Этот код переопределяет метод CreateRibbonExtensibilityObject и возвращает класс XML-ленты приложению Office.

    Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
        Return New Ribbon1()
    End Function
    
    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new Ribbon1();
    }
    
  5. В Обозреватель решений выберите XML-файл ленты.По умолчанию XML-файл ленты называется Ribbon1.xml.

  6. В строке меню выберите Вид, Код.

    Xml-файл ленты открывает в редакторе кода.

  7. В редакторе кода замените содержимое XML-файла ленты со следующим кодом.

    <?xml version="1.0" encoding="UTF-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
      <contextMenus>
        <contextMenu idMso="ContextMenuText">
          <button id="BoldButton" label="Bold" onAction="ButtonClick"        
               getVisible="GetVisible" />
          <button id="ItalicButton" label="Italic" onAction="ButtonClick" 
              getVisible="GetVisible"/>
        </contextMenu>
      </contextMenus>
    </customUI>
    

    Этот код добавляет 2 кнопки в контекстное меню, которое появляется при нажатии правой кнопкой мыши документ.

  8. Правой кнопкой мыши щелкните ThisDocument в Обозревателе решений, а затем нажмите Просмотреть код.

  9. Объявите следующие переменные и переменные закладки на уровне класса.

    Public selectedBookmark As Microsoft.Office.Tools.Word.Bookmark
    Public ShowBoldButton As String = False
    Public ShowItalicButton As String = False
    Public WordTrue As Integer = -1
    Public WordFalse As Integer = 0
    
            public Microsoft.Office.Tools.Word.Bookmark selectedBookmark;
            public bool showBoldButton = false;
            public bool showItalicButton = false;
            public int WordTrue = -1;
            public int WordFalse = 0;
    
    
  10. В Обозреватель решений выберите файл кода ленты.По умолчанию файл кода ленты называется Ribbon1.cs или Ribbon1.vb.

  11. В строке меню выберите Вид, Код.

    В редакторе кода открывается файл кода ленты.

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

    Public Function GetVisible(ByVal control As Office.IRibbonControl) As Boolean
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.ShowBoldButton = True Then
                Globals.ThisDocument.ShowBoldButton = False
                Return True
            Else
                Return False
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.ShowItalicButton = True Then
                Globals.ThisDocument.ShowItalicButton = False
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function
    
           public bool GetVisible(Office.IRibbonControl control)
           {
               if (control.Id == "BoldButton")
               {
                   if (Globals.ThisDocument.showBoldButton == true)
                   {
                       Globals.ThisDocument.showBoldButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else if (control.Id == "ItalicButton")
               {
                   if (Globals.ThisDocument.showItalicButton == true)
                   {
                       Globals.ThisDocument.showItalicButton = false;
                       return true;
                   }
                   else
                   {
                       return false;
                   }
               }
               else
               {
                   return false;
               }
    
           }
    
    

Форматирование текста в закладке

  1. В файле кода ленты, добавьте обработчик событий ButtonClick, чтобы применить форматирование к закладке.

    Public Sub ButtonClick(ByVal control As Office.IRibbonControl)
        If control.Id = "BoldButton" Then
            If Globals.ThisDocument.selectedBookmark.Bold = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Bold = _
                    Globals.ThisDocument.WordTrue
            End If
        ElseIf control.Id = "ItalicButton" Then
            If Globals.ThisDocument.selectedBookmark.Italic = _
                Globals.ThisDocument.WordTrue Then
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordFalse
            Else
                Globals.ThisDocument.selectedBookmark.Italic = _
                    Globals.ThisDocument.WordTrue
            End If
        End If
    End Sub
    
    public void ButtonClick(Office.IRibbonControl control)
    {
        if (control.Id == "BoldButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Bold == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Bold = 
                    Globals.ThisDocument.WordTrue;
            }
        }
        else if (control.Id == "ItalicButton")
        {
            if (Globals.ThisDocument.selectedBookmark.Italic == 
                Globals.ThisDocument.WordTrue)
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordFalse;
            }
            else
            {
                Globals.ThisDocument.selectedBookmark.Italic = 
                    Globals.ThisDocument.WordTrue;
            }
        }
    
    }
    
  2. Обозреватель решений выберите ThisDocument.cs или ThisDocument.vb.

  3. В строке меню выберите Вид, Код.

    Файл класса ThisDocument открывается в редакторе кода.

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

    
    Private Sub Bookmark_BeforeRightClick(ByVal sender As Object, ByVal e _
    As Microsoft.Office.Tools.Word.ClickEventArgs) _
    Handles Bookmark1.BeforeRightClick, Bookmark2.BeforeRightClick
        Dim startPosition As Integer = 0
        Dim i As Integer
    
        ' If bookmarks overlap, get bookmark closest to cursor.
        For i = 1 To e.Selection.Bookmarks.Count
            If e.Selection.Bookmarks(i).Start > startPosition Then
                startPosition = e.Selection.Bookmarks(i).Start
            End If
        Next
    
        ' If closest bookmark is the sender, show the shortcut menu options.
        If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _
            startPosition Then
            selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark)
    
            ShowBoldButton = True
            ShowItalicButton = True
    
        End If
    
    End Sub
    
    
            void bookmark_BeforeRightClick(object sender, ClickEventArgs e)
            {
                int startPosition = 0;
    
                // If bookmarks overlap, get bookmark closest to cursor.
                for (int i = 1; i <= e.Selection.Bookmarks.Count; i++)
                {
                    if (e.Selection.Bookmarks[i].Start > startPosition)
                    {
                        startPosition = e.Selection.Bookmarks[i].Start;
                    }
                }
    
                // If closest bookmark is the sender, show shortcut menu options.
                if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition)
                {
                    selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
    
                    showBoldButton = true;
                    showItalicButton = true;
    
                }
    
            }
    
    
    ПримечаниеПримечание

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

  5. В C# также необходимо добавить обработчики событий для элементов управления закладки в событие Startup. Дополнительные сведения о создании обработчиков событий см. в разделе Практическое руководство. Создание обработчиков событий в проектах Office.

    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        this.bookmark1.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
        this.bookmark2.BeforeRightClick += new ClickEventHandler(bookmark_BeforeRightClick);
    }
    

Тестирование приложения

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

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

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

  2. Щелкните правой кнопкой мыши в первой закладке и выберите Полужирный.

  3. Убедитесь в том, чтобы весь текст в bookmark1 был отформатирован полужирным шрифтом.

  4. Щелкните правой кнопкой мыши текст в том месте, где закладки перекрывают друг друга, и выберите Курсив.

  5. Убедитесь в том, что курсивом отображается весь текст в bookmark2 и только часть текста в bookmark1, перекрывающей bookmark2.

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

Далее будут рассмотрены следующие задачи:

См. также

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

Пошаговые руководства с использованием Word

Автоматизация Word с помощью расширенных объектов

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

Необязательные параметры в решениях Office

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

Настройка пользовательского интерфейса Office