次の方法で共有


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

このチュートリアルでは、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 コントロールを追加するには

  1. [ツールボックス]では、[Word コントロール] のタブから、ドラッグ、ドキュメントに Bookmark のコントロール。

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

  2. テキスト」を右クリックして選択し、をクリックします。**[OK]**ときにショートカット メニューを作成するWordを使用します。

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

  3. は、単語「右クリックして Bookmark の別のコントロールをブックマーク内のテキスト」を追加します。

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

    [!メモ]

    は、単語「右クリック bookmark1 と bookmark2両方にテキスト」です。

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

ショートカット メニューにコマンドを追加する

ドキュメントを右クリックすると表示されるショートカット メニューにボタンを追加します。

コマンドをショートカット メニューに追加するには

  1. プロジェクトに [Ribbon XML] の項目を追加します。詳細については、「方法 : リボンのカスタマイズの概要」を参照してください。

  2. [ソリューション エクスプローラー]、を選択します [ThisDocument.cs] または [ThisDocument.vb]

  3. メニュー バーで、[表示]、**[コード]**を選択します。

    [ThisDocument] のクラス ファイルがコード エディターで開きます。

  4. [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();
    }
    
  5. **[ソリューション エクスプローラー]**では、リボンXMLファイルを選択します。既定では、リボンXMLファイルにはRibbon1.xmlという名前です。

  6. メニュー バーで、[表示]、**[コード]**を選択します。

    リボンのXMLファイルがコード エディターで開きます。

  7. コード エディターで、次のコードにリボン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つ追加します。

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

  9. クラス レベルで次の変数とブックマーク変数を宣言します。

    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;
    
    
  10. **[ソリューション エクスプローラー]**では、リボン コード ファイルを選択します。既定では、リボン コード ファイルが [Ribbon1.cs] か **[Ribbon1.vb]**という名前です。

  11. メニュー バーで、[表示]、**[コード]**を選択します。

    コード エディターでリボン コード ファイルが開きます。

  12. リボン コード ファイルに次のメソッドを追加します。これは、ドキュメントのショートカット メニューに追加した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;
               }
    
           }
    
    

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

  1. リボン コード ファイルでは、ブックマークに書式を適用するために 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;
            }
        }
    
    }
    
  2. [ソリューション エクスプローラー]、を選択します [ThisDocument.cs] または [ThisDocument.vb]

  3. メニュー バーで、[表示]、**[コード]**を選択します。

    [ThisDocument] のクラス ファイルがコード エディターで開きます。

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

    [!メモ]

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

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

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

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

文書をテストするには

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

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

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

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

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

次の手順

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

参照

概念

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

拡張オブジェクトによる Word の自動化

Bookmark コントロール

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

その他の技術情報

Office UI のカスタマイズ