共用方式為


逐步解說:建立書籤的快速鍵功能表

本逐步解說示範如何透過 Word 文件層級自訂建立 Bookmark 控制項的捷徑功能表。當使用者以滑鼠右鍵按一下書籤中的文字時,捷徑功能表就會顯示,提供使用者格式化文字的選項。

**適用於:**本主題中的資訊適用於 Word 2013 和 Word 2010 的文件層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

這個逐步解說將說明下列工作:

  • 建立專案.

  • 將文字和書籤加入至文件.

  • 將命令加入至捷徑功能表.

  • 若要格式化書籤中的文字.

注意事項注意事項

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

必要條件

您需要下列元件才能完成此逐步解說:

-

包含 Microsoft Office Developer 工具的 Visual Studio 2012 版本。如需詳細資訊,請參閱[設定電腦以開發 Office 方案](bb398242\(v=vs.110\).md)。
  • Word 2013 或 Word 2010

建立專案

第一步就是在 Visual Studio 中建立 Word 文件專案。

若要建立新的專案

  • 建立名為 My Bookmark Shortcut Menu 的 Word 文件專案。在精靈中選取 [建立新文件]。如需詳細資訊,請參閱HOW TO:在 Visual Studio 中建立 Office 專案

    Visual Studio 會在設計工具中開啟新的 Word 文件,並將 [My Bookmark Shortcut Menu] 專案加入至 [方案總管]。

將文字和書籤加入至文件

將部分文字加入至文件,然後加入兩個重疊書籤。

若要將文字加入至文件

  • 在出現於專案的設計工具中的文件,請輸入下列文字。

    這是您在以滑鼠右鍵按一下書籤中的文字時,建立捷徑功能表的範例。

若要將書籤控制項加入至文件

  1. 在 [工具箱],從 [Word 控制項] 索引標籤,拖曳至您的文件 Bookmark 控制。

    [加入書籤控制項] 對話方塊隨即出現。

  2. 選取「建立捷徑功能表中,以滑鼠右鍵按一下文字」時,然後按一下 [確定]。

    bookmark1 即會加入至文件。

  3. 將另一 Bookmark 控制項加入至 Word 「以滑鼠右鍵按一下書籤中的文字」。

    bookmark2 即會加入至文件。

    注意事項注意事項

    詞彙「以滑鼠右鍵按一下文字」。 bookmark1 和 bookmark2。

在設計階段將書籤加入至文件時,會建立 Bookmark 控制項。您可以針對書籤的數個事件進行程式設計。您可以在書籤的 BeforeRightClick 事件中撰寫程式碼,以便使用者在書籤中的文字上按一下滑鼠右鍵後,捷徑功能表就會出現。

將命令加入至捷徑功能表

將按鈕加入至出現的快顯功能表,當您以滑鼠右鍵按一下文件。

將命令加入至捷徑功能表

  1. 將 [功能區 XML]項目加入至專案。如需詳細資訊,請參閱HOW TO:開始自訂功能區

  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>
    

    此程式碼會將兩個按鈕加入至出現的捷徑功能表,當您以滑鼠右鍵按一下文件。

  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. 在功能區程式碼檔案中,加入下列方法。這是您加入至文件的捷徑功能表的兩個按鈕的回呼方法。這個方法會判斷這些按鈕是否顯示在捷徑功能表。為,當您以滑鼠右鍵按一下書籤中的文字,粗體和斜體按鈕外觀。

    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. [方案總管]、Select [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 事件。如需建立事件處理常式的詳細資訊,請參閱 HOW TO:在 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

書籤控制項

Office 方案中的選擇性參數

其他資源

Office UI 自訂