チュートリアル : ブックマークのショートカット メニューの作成
更新 : 2007 年 11 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 プロジェクトの種類
Microsoft Office のバージョン
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
このチュートリアルでは、Word のドキュメント レベルのカスタマイズを使用して Bookmark コントロールのショートカット メニューを作成する方法を示します。ユーザーがブックマーク内のテキストを右クリックすると、ショートカット メニューにテキストの書式設定オプションが表示されます。
このチュートリアルでは、次のタスクについて説明します。
デザイン時におけるドキュメント レベルのプロジェクトの文書へのテキストおよびブックマークの追加
ショートカット メニューの作成
重なっているブックマークのチェック
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
前提条件
このチュートリアルを完了するには、次のコンポーネントが必要です。
Visual Studio Tools for Office (Visual Studio 2008 Professional および Visual Studio Team System のオプションの要素)
Microsoft Office Word 2003 または Microsoft Office Word 2007
ここに挙げた Visual Studio のバージョンでは、Visual Studio Tools for Office が既定でインストールされます。インストールされているかどうかを確認する方法については、「Visual Studio Tools for Office のインストール」を参照してください。
プロジェクトの作成
まず、Visual Studio で Word 文書プロジェクトを作成します。
新しいプロジェクトを作成するには
My Bookmark Shortcut Menu という名前の Word 文書プロジェクトを作成します。ウィザードで、[新規ドキュメントの作成] をクリックします。詳細については、「方法 : Visual Studio Tools for 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++) { object o = i; if (e.Selection.Bookmarks.get_Item(ref o).Start > startPosition) { startPosition = e.Selection.Bookmarks.get_Item(ref o).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 イベントに追加する必要があります。イベンド ハンドラの作成方法の詳細については、「方法 : Visual Studio Tools for 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 コントロールを使用したドキュメント書式の変更」を参照してください。