チュートリアル : ブックマークのショートカット メニューの作成
このチュートリアルでは、Word のドキュメント レベルのカスタマイズを使用して Bookmark コントロールのショートカット メニューを作成する方法を示します。ユーザーがブックマーク内のテキストを右クリックすると、ショートカット メニューにテキストの書式設定オプションが表示されます。
対象: このトピックの情報は、Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
プロジェクトの作成.
文書へのテキストとブックマークの追加.
ショートカット メニューにコマンドを追加する.
ブックマーク内のテキストに書式を設定するには.
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
- Word 2013 または 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.
文書に Bookmark コントロールを追加するには
[ツールボックス]では、[Word コントロール] のタブから、ドラッグ、ドキュメントに Bookmark のコントロール。
[ブックマーク コントロールの追加] ダイアログ ボックスが表示されます。
テキスト」を右クリックして選択し、をクリックします。**[OK]**ときにショートカット メニューを作成するWordを使用します。
bookmark1 がドキュメントに追加されます。
は、単語「右クリックして Bookmark の別のコントロールをブックマーク内のテキスト」を追加します。
bookmark2 がドキュメントに追加されます。
[!メモ]
は、単語「右クリック bookmark1 と bookmark2両方にテキスト」です。
デザイン時に文書にブックマークを追加すると、Bookmark コントロールが作成されます。ブックマークの複数のイベントに対してプログラミングを行うことができます。ブックマークの BeforeRightClick イベントにコードを作成することで、ユーザーがブックマーク内のテキストを右クリックしたときにショートカット メニューを表示できます。
ショートカット メニューにコマンドを追加する
ドキュメントを右クリックすると表示されるショートカット メニューにボタンを追加します。
コマンドをショートカット メニューに追加するには
プロジェクトに [Ribbon XML] の項目を追加します。詳細については、「方法 : リボンのカスタマイズの概要」を参照してください。
[ソリューション エクスプローラー]、を選択します [ThisDocument.cs] または [ThisDocument.vb]。
メニュー バーで、[表示]、**[コード]**を選択します。
[ThisDocument] のクラス ファイルがコード エディターで開きます。
[ThisDocument] のクラスに次のコードを追加します。このコードは、CreateRibbonExtensibilityObject メソッドをオーバーライドし、Office アプリケーションにリボン XML クラスを返します。
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>
このコードは、表示されるショートカット メニューにドキュメントを右クリックすると、ボタンを2つ追加します。
ソリューション エクスプローラーで 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]**という名前です。
メニュー バーで、[表示]、**[コード]**を選択します。
コード エディターでリボン コード ファイルが開きます。
リボン コード ファイルに次のメソッドを追加します。これは、ドキュメントのショートカット メニューに追加した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; } }
ブックマーク内のテキストに書式を設定するには
リボン コード ファイルでは、ブックマークに書式を適用するために 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; } } }
[ソリューション エクスプローラー]、を選択します [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 イベントに追加する必要があります。イベンド ハンドラーの作成方法の詳細については、「方法: 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 コントロールを使用したドキュメント書式の変更」を参照してください。