チュートリアル : ブックマークのショートカット メニューの作成

更新 : 2007 年 11 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • ドキュメント レベルのプロジェクト

Microsoft Office のバージョン

  • Word 2007

  • Word 2003

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

このチュートリアルでは、Word のドキュメント レベルのカスタマイズを使用して Bookmark コントロールのショートカット メニューを作成する方法を示します。ユーザーがブックマーク内のテキストを右クリックすると、ショートカット メニューにテキストの書式設定オプションが表示されます。

このチュートリアルでは、次のタスクについて説明します。

  • デザイン時におけるドキュメント レベルのプロジェクトの文書へのテキストおよびブックマークの追加

  • ショートカット メニューの作成

  • 重なっているブックマークのチェック

47cs5caa.alert_note(ja-jp,VS.90).gifメモ :

お使いのマシンで、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.

文書にブックマーク コントロールを追加するには

  1. ツールボックス[Word コントロール] タブから Bookmark コントロールをドキュメントにドラッグします。

    [ブックマーク コントロールの追加] ダイアログ ボックスが表示されます。

  2. creating a shortcut menu when you right-click the text” という語句を選択し、[OK] をクリックします。

    bookmark1 がドキュメントに追加されます。

  3. 別の Bookmark コントロールを "right-click the text in a bookmark" という語句に追加します。

    bookmark2 がドキュメントに追加されます。

    47cs5caa.alert_note(ja-jp,VS.90).gifメモ :

    right-click the text” という語句が bookmark1 と bookmark2 の両方に表示されます。

デザイン時に文書にブックマークを追加すると、Bookmark コントロールが作成されます。ブックマークの複数のイベントに対してプログラミングを行うことができます。ブックマークの BeforeRightClick イベントにコードを作成することで、ユーザーがブックマーク内のテキストを右クリックしたときにショートカット メニューを表示できます。

ショートカット メニューの作成

ショートカット メニューを作成するには

  1. ソリューション エクスプローラで ThisDocument を右クリックし、[コードの表示] をクリックします。

  2. 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;
    
  3. メニューを作成するメソッドを追加します。

    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;
    }
    
  4. 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();
    }
    

ブックマーク内のテキストに書式を設定するには

  1. ブックマークに書式を適用するために 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;
            } 
        }
    }
    
  2. 両方のブックマークの BeforeRightClick イベントを処理する showPopupMenu イベント ハンドラを追加します。

    47cs5caa.alert_note(ja-jp,VS.90).gifメモ :

    ブックマークが部分的に重なっている場合を処理するためのコードを作成する必要があります。これを行わないと、既定でコードは選択範囲内にあるすべてのブックマークについて呼び出されます。

    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;
        }
    
    
    }
    
  3. 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);
    

アプリケーションのテスト

ドキュメントをテストして、ブックマーク内のテキストを右クリックしたときにショートカット メニューに太字と斜体のメニュー項目が表示され、テキストが正しく書式設定されることを確認します。

文書をテストするには

  1. F5 キーを押してプロジェクトを実行します。

  2. 最初のブックマークを右クリックし、[太字] をクリックします。

  3. bookmark1 内のすべてのテキストが太字になることを確認します。

  4. ブックマークが重なっている部分のテキストを右クリックし、[斜体] をクリックします。

  5. bookmark2 ではすべてのテキストが斜体になるが、bookmark1 では bookmark2 と重なっている部分のテキストしか斜体にならないことを確認します。

次の手順

次に行う作業は以下のとおりです。

参照

概念

Word を使用したチュートリアル

Office UI のカスタマイズ

Bookmark コントロール

Office ソリューションの省略可能なパラメータについて

その他の技術情報

Word ホスト コントロール