チュートリアル : ブックマークのショートカット メニューの作成
このチュートリアルでは、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 文書プロジェクトを作成します。 ウィザードで、[新規ドキュメントの作成] をクリックします。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
新しい Word 文書が Visual Studio のデザイナーに開かれ、My Bookmark Shortcut Menu プロジェクトがソリューション エクスプローラーに追加されます。
文書へのテキストとブックマークの追加
文書にテキストを追加し、部分的に重なった 2 つのブックマークを追加します。
文書にテキストを追加するには
次のテキストを入力します。
This is an example of creating a shortcut menu when you right-click the text in a bookmark.
文書にブックマーク コントロールを追加するには
ツールボックスの [Word コントロール] タブから Bookmark コントロールをドキュメントにドラッグします。
[ブックマーク コントロールの追加] ダイアログ ボックスが表示されます。
“creating a shortcut menu when you right-click the text” という語句を選択し、[OK] をクリックします。
bookmark1 がドキュメントに追加されます。
別の Bookmark コントロールを "right-click the text in a bookmark" という語句に追加します。
bookmark2 がドキュメントに追加されます。
注意
“right-click the text” という語句が 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; } } }
両方のブックマークの BeforeRightClick イベントを処理する showPopupMenu イベント ハンドラーを追加します。
注意
ブックマークが部分的に重なっている場合を処理するためのコードを作成する必要があります。 これを行わないと、既定でコードは選択範囲内にあるすべてのブックマークについて呼び出されます。
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 イベントに追加する必要があります。 イベンド ハンドラーの作成方法の詳細については、「方法: 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 コントロールを使用したドキュメント書式の変更」を参照してください。