逐步解說:建立書籤的快速鍵功能表
本逐步解說示範如何透過 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] 專案加入至 [方案總管]。
將文字和書籤加入至文件
將部分文字加入至文件,然後加入兩個重疊書籤。
若要將文字加入至文件
在出現於專案的設計工具中的文件,請輸入下列文字。
這是您在以滑鼠右鍵按一下書籤中的文字時,建立捷徑功能表的範例。
若要將書籤控制項加入至文件
在 [工具箱],從 [Word 控制項] 索引標籤,拖曳至您的文件 Bookmark 控制。
[加入書籤控制項] 對話方塊隨即出現。
選取「建立捷徑功能表中,以滑鼠右鍵按一下文字」時,然後按一下 [確定]。
bookmark1 即會加入至文件。
將另一 Bookmark 控制項加入至 Word 「以滑鼠右鍵按一下書籤中的文字」。
bookmark2 即會加入至文件。
注意事項 詞彙「以滑鼠右鍵按一下文字」。 bookmark1 和 bookmark2。
在設計階段將書籤加入至文件時,會建立 Bookmark 控制項。您可以針對書籤的數個事件進行程式設計。您可以在書籤的 BeforeRightClick 事件中撰寫程式碼,以便使用者在書籤中的文字上按一下滑鼠右鍵後,捷徑功能表就會出現。
將命令加入至捷徑功能表
將按鈕加入至出現的快顯功能表,當您以滑鼠右鍵按一下文件。
將命令加入至捷徑功能表
將 [功能區 XML]項目加入至專案。如需詳細資訊,請參閱HOW TO:開始自訂功能區。
在 [方案總管],選取 [ThisDocument.cs]或 [ThisDocument.vb]。
在功能表列上,選擇 [檢視], [程式碼]。
[ThisDocument] 類別檔案隨即在 [程式碼編輯器中開啟。
將下列程式碼加入至 [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(); }
在 [方案總管],選取功能區 XML 檔中。根據預設,功能區 XML 檔中名為 Ribbon1.xml。
在功能表列上,選擇 [檢視], [程式碼]。
功能區 XML 檔案隨即在 [程式碼編輯器中開啟。
在程式碼編輯器中,以下列程式碼取代功能區 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>
此程式碼會將兩個按鈕加入至出現的捷徑功能表,當您以滑鼠右鍵按一下文件。
以滑鼠右鍵按一下 [方案總管] 中的 ThisDocument,然後按一下 [檢視程式碼]。
下列宣告變數和書籤變數是在類別層級。
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;
在 [方案總管],選取功能區程式碼檔案。根據預設,功能區程式碼檔案名為 [Ribbon1.cs]或 [Ribbon1.vb]。
在功能表列上,選擇 [檢視], [程式碼]。
功能區程式碼檔案隨即在程式碼編輯器中開啟。
在功能區程式碼檔案中,加入下列方法。這是您加入至文件的捷徑功能表的兩個按鈕的回呼方法。這個方法會判斷這些按鈕是否顯示在捷徑功能表。為,當您以滑鼠右鍵按一下書籤中的文字,粗體和斜體按鈕外觀。
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; } }
若要格式化書籤中的文字
在功能區程式碼檔案,請將 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; } } }
[方案總管]、Select [ThisDocument.cs]或者 [ThisDocument.vb]。
在功能表列上,選擇 [檢視], [程式碼]。
[ThisDocument] 類別檔案隨即在 [程式碼編輯器中開啟。
將下列程式碼加入至 [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; } }
注意事項 您必須撰寫程式碼,才能處理書籤重疊的情況。如果沒有這樣做,根據預設,會對選取範圍內的所有書籤呼叫程式碼。
在 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); }
測試應用程式
測試文件驗證粗體和斜體的功能表項目會出現在捷徑功能表,當您在書籤中以滑鼠右鍵按一下文字,則文字適當地加以格式化。
若要測試您的文件
請按 F5 執行您的專案。
在第一個書籤中按一下滑鼠右鍵,然後選取 [粗體]。
驗證 bookmark1 中的所有文字都已格式化為粗體。
在重疊書籤的文字上按一下滑鼠右鍵,然後選取 [斜體]。
驗證 bookmark2 中的所有文字是斜體,以及在 bookmark1 中只有與 bookmark2 重疊的文字部分是斜體。
後續步驟
以下則是接下來的一些工作:
撰寫程式碼,以回應 Excel 中主控制項的事件。如需詳細資訊,請參閱逐步解說:針對 NamedRange 控制項的事件進行程式設計。
使用核取方塊變更書籤中的格式。如需詳細資訊,請參閱逐步解說:使用 CheckBox 控制項來變更文件格式。