逐步解說:建立書籤的快速鍵功能表
本逐步解說示範如何透過 Word 文件層級自訂建立 Bookmark 控制項的捷徑功能表。 當使用者以滑鼠右鍵按一下書籤中的文字時,捷徑功能表就會顯示,提供使用者格式化文字的選項。
**適用於:**本主題中的資訊適用於 Word 2007 和 Word 2010 的文件層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
這個逐步解說將說明下列工作:
在設計階段,透過文件層級專案將文字和書籤加入至文件。
建立捷徑功能表。
檢查重疊的書籤。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱 Visual Studio 設定。 |
必要條件
您需要下列元件才能完成此逐步解說:
-
包含 Microsoft Office 開發者工具的 Visual Studio 2010 版本。 如需詳細資訊,請參閱[設定電腦以開發 Office 方案](bb398242\(v=vs.100\).md)。
- Microsoft Office Word 2007 或 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 控制項加入至文字 [以滑鼠右鍵按一下書籤中的文字]。
bookmark2 即會加入至文件。
注意事項 bookmark1 和 bookmark2 中都會出現文字 [以滑鼠右鍵按一下文字]。
在設計階段將書籤加入至文件時,會建立 Bookmark 控制項。 您可以針對書籤的數個事件進行程式設計。 您可以在書籤的 BeforeRightClick 事件中撰寫程式碼,以便使用者在書籤中的文字上按一下滑鼠右鍵後,捷徑功能表就會出現。
建立捷徑功能表
若要建立捷徑功能表
以滑鼠右鍵按一下 [方案總管] 中的 ThisDocument,然後按一下 [檢視程式碼]。
在類別層級宣告 CommandBar 變數和書籤變數。
Private commandBar As Office.CommandBar Private selectedBookmark As Microsoft.Office.Tools.Word.Bookmark WithEvents boldText As Office.CommandBarButton WithEvents ItalicText As Office.CommandBarButton
private Office.CommandBar commandBar; private Office.CommandBarButton boldText; private Office.CommandBarButton italicText; private Microsoft.Office.Tools.Word.Bookmark selectedBookmark; const int WordTrue = -1; const int WordFalse = 0;
加入方法以建立功能表。
Private Sub AddPopUp() commandBar = Application.CommandBars.Add( _ "FormatText", Office.MsoBarPosition.msoBarPopup, , True) ' Add a button and set the style, caption, icon and tag. boldText = CType(commandBar.Controls.Add(1), Office.CommandBarButton) With boldText .Style = Office.MsoButtonStyle.msoButtonIconAndCaption .Caption = "Bold" .FaceId = 113 .Tag = "0" End With ' Add a button and set the style, caption, icon and tag. ItalicText = CType(commandBar.Controls.Add(1), Office.CommandBarButton) With ItalicText .Style = Office.MsoButtonStyle.msoButtonIconAndCaption .Caption = "Italic" .FaceId = 114 .Tag = "1" End With CType(Me.AttachedTemplate, Microsoft.Office.Interop.Word.Template).Saved = True End Sub
private void AddPopUp() { commandBar = Application.CommandBars.Add("FormatText", Office.MsoBarPosition.msoBarPopup, missing, true); // Add a button and set the style, caption, icon and tag. boldText = (Office.CommandBarButton)commandBar.Controls.Add( 1, missing, missing, missing, missing); boldText.Style = Office.MsoButtonStyle.msoButtonCaption; boldText.Caption = "Bold"; boldText.FaceId = 113; boldText.Tag = "0"; // Add a button and set the style, caption, icon and tag. italicText = (Office.CommandBarButton)commandBar.Controls.Add( 1, missing, missing, missing, missing); italicText.Style = Office.MsoButtonStyle.msoButtonCaption; italicText.Caption = "Italic"; italicText.FaceId = 114; italicText.Tag = "1"; // Handle the click events with the ButtonClick procedure. boldText.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ButtonClick); italicText.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(ButtonClick); ((Microsoft.Office.Interop.Word.Template)this.AttachedTemplate).Saved = true; }
從 ThisDocument 的 Startup 事件呼叫 AddPopup。
Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Startup AddPopUp() End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e) { AddPopUp(); }
若要格式化書籤中的文字
加入 ButtonClick 事件處理常式,以將格式套用至書籤。
Private Sub ButtonClick(ByVal ctrl As Office.CommandBarButton, _ ByRef Cancel As Boolean) Handles boldText.Click, ItalicText.Click Select Case ctrl.Caption Case "Bold" selectedBookmark.Bold = Not selectedBookmark.Bold Case "Italic" selectedBookmark.Italic = Not selectedBookmark.Italic End Select Me.ActiveWindow.SetFocus() End Sub
private void ButtonClick(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) { if (Ctrl.Caption == "Bold") { if (selectedBookmark.Bold == WordTrue) { selectedBookmark.Bold = WordFalse; } else { selectedBookmark.Bold = WordTrue; } } else if (Ctrl.Caption == "Italic") { if (selectedBookmark.Italic == WordTrue) { selectedBookmark.Italic = WordFalse; } else { selectedBookmark.Italic = WordTrue; } } }
加入 showPopupMenu 事件處理常式,以處理這兩個書籤的 BeforeRightClick 事件。
注意事項 您必須撰寫程式碼,才能處理書籤重疊的情況。 如果沒有這樣做,根據預設,會對選取範圍內的所有書籤呼叫程式碼。
Private Sub showPopupMenu(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 popup. If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _ startPosition Then selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark) commandBar.ShowPopup() e.Cancel = True End If End Sub
private void ShowPopupMenu(object sender, Microsoft.Office.Tools.Word.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 the popup. if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition) { selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender; commandBar.ShowPopup(missing, missing); e.Cancel = true; } }
在 C# 中,您必須將書籤控制項的事件處理常式加入至 Startup 事件。 如需建立事件處理常式的詳細資訊,請參閱 HOW TO:在 Office 專案中建立事件處理常式。
this.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu); this.bookmark2.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu);
測試應用程式
測試文件,驗證以滑鼠右鍵按一下書籤中的文字後,捷徑功能表中會出現粗體和斜體的功能表項目,且文字已適當地格式化。
若要測試您的文件
請按 F5 執行您的專案。
在第一個書籤中按一下滑鼠右鍵,然後選取 [粗體]。
驗證 bookmark1 中的所有文字都已格式化為粗體。
在重疊書籤的文字上按一下滑鼠右鍵,然後選取 [斜體]。
驗證 bookmark2 中的所有文字是斜體,以及在 bookmark1 中只有與 bookmark2 重疊的文字部分是斜體。
後續步驟
以下則是接下來的一些工作:
撰寫程式碼,以回應 Excel 中主控制項的事件。 如需詳細資訊,請參閱逐步解說:針對 NamedRange 控制項的事件進行程式設計。
使用核取方塊變更書籤中的格式。 如需詳細資訊,請參閱逐步解說:使用 CheckBox 控制項來變更文件格式。