チュートリアル: 実行時に VSTO アドインで文書にコントロールを追加する

VSTO アドインを使用して、開いている Microsoft Office Word 文書にコントロールを追加できます。 このチュートリアルでは、リボンを使用してユーザーが文書に Button または RichTextContentControl を追加できるようにする方法を説明します。

対象: このトピックの情報は、Word 2010 の VSTO アドインのプロジェクトに適用されます。 詳細については、「 Features Available by Office Application and Project Type」を参照してください。

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

  • 新しい Word VSTO アドイン プロジェクトの作成。

  • ドキュメントにコントロールを追加するためのユーザー インターフェイス (UI) の提供。

  • 実行時のドキュメントへのコントロールの追加。

  • ドキュメントからのコントロールの削除。

    Note

    次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

新しい Word アドイン プロジェクトを作成する

まず Word VSTO アドイン プロジェクトを作成します。

新しい Word VSTO アドイン プロジェクトを作成するには

  1. WordDynamicControls という名前で Word 用 VSTO アドイン プロジェクトを作成します。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

  2. Microsoft.Office.Tools.Word.v4.0.Utilities.dll アセンブリへの参照を追加します。 この参照は、このチュートリアルの後半でプログラムを使用して Windows フォーム コントロールをドキュメントに追加するのに必要です。

ドキュメントにコントロールを追加するための UI を提供する

Word のリボンにカスタム タブを追加します。 ユーザーはタブにあるチェック ボックスをオンにして、ドキュメントにコントロールを追加できます。

ドキュメントにコントロールを追加するための UI を提供するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、 [リボン (ビジュアル デザイナー)]をクリックします。

  3. 新しいリボンの名前を " MyRibbon" に変更し、 [追加]をクリックします。

    リボン デザイナーで MyRibbon.cs ファイルまたは MyRibbon.vb ファイルが開き、既定のタブとグループが表示されます。

  4. リボン デザイナーで、 group1 グループをクリックします。

  5. [プロパティ] ウィンドウで、 group1[ラベル] プロパティを [コントロールの追加]に変更します。

  6. ツールボックス[Office リボン コントロール]タブから、 CheckBox コントロールを group1にドラッグします。

  7. [CheckBox1] をクリックしてオンにします。

  8. [プロパティ] ウィンドウで、次のプロパティを変更します。

    プロパティ
    名前 addButtonCheckBox
    ラベル 追加ボタン
  9. group1に 2 つ目のチェック ボックスを追加し、次のプロパティを変更します。

    プロパティ
    名前 addRichTextCheckBox
    ラベル リッチ テキスト コントロールの追加
  10. リボン デザイナーで [ボタンの追加]をダブルクリックします。

    Click [ボタンの追加] チェック ボックスの イベント ハンドラーがコード エディターで開きます。

  11. リボン デザイナーに戻り、 [リッチ テキスト コントロールの追加]をダブルクリックします。

    Click [リッチ テキスト コントロールの追加] チェック ボックスの イベント ハンドラーがコード エディターで開きます。

    このチュートリアルの後半で、アクティブなドキュメントにコントロールを追加および削除するためのコードをこれらのイベント ハンドラーに追加します。

アクティブなドキュメントでコントロールを追加または削除する

VSTO アドインのコードでは、コントロールを追加するには、その前にアクティブなドキュメントを Documentホスト項目 に変換する必要があります。 Office ソリューションではマネージド コントロールを追加できるのはホスト項目に対してだけです。これはコントロールのコンテナーとして機能します。 VSTO アドイン プロジェクトでは、GetVstoObject メソッドを使用すると、実行時にホスト項目を作成できます。

アクティブなドキュメントに ThisAddIn または Button を追加または削除するために呼び出せるメソッドを RichTextContentControl クラスに追加します。 このチュートリアルの後半で、これらのメソッドをリボンのチェック ボックスの Click イベント ハンドラーから呼び出します。

アクティブなドキュメントでコントロールを追加または削除するには

  1. ソリューション エクスプローラーThisAddIn.cs または ThisAddIn.vb をダブルクリックして、コード エディターでファイルを開きます。

  2. ThisAddIn クラスに次のコードを追加します。 このコードは、ドキュメントに追加されるコントロールを表す Button オブジェクトと RichTextContentControl オブジェクトを宣言します。

    private Microsoft.Office.Tools.Word.Controls.Button button = null;
    private RichTextContentControl richTextControl = null;
    
  3. 次のメソッドを ThisAddIn クラスに追加します。 ユーザーがリボンの [ボタンの追加] チェック ボックスをクリックしてこれがオンになると、このメソッドによって Button がドキュメントの現在の選択項目に追加されます。チェック ボックスがオフになると Button が削除されます。

    internal void ToggleButtonOnDocument()
    {
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyButton";
    
        if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                button = vstoDocument.Controls.AddButton(
                    selection.Range, 100, 30, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    
  4. 次のメソッドを ThisAddIn クラスに追加します。 ユーザーがリボンの [リッチ テキスト コントロールの追加] チェック ボックスをクリックしてこれがオンになると、このメソッドによって RichTextContentControl がドキュメントの現在の選択項目に追加されます。チェック ボックスがオフになると RichTextContentControl が削除されます。

    internal void ToggleRichTextControlOnDocument()
    {
    
        Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    
    
        string name = "MyRichTextBoxControl";
    
        if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
        {
            Word.Selection selection = this.Application.Selection;
            if (selection != null && selection.Range != null)
            {
                richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                    selection.Range, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    

ドキュメントを保存するときにボタン コントロールを削除する

ドキュメントを保存して閉じるときに Windows フォーム コントロールは保存されません。 ただし、各コントロールの ActiveX ラッパーはドキュメントに残るため、エンド ユーザーがドキュメントを再び開くときにこのラッパーの枠線が表示される場合があります。 VSTO アドインに作成された Windows フォーム コントロールを動的にクリーン アップする方法は、いくつかあります。このチュートリアルでは、ドキュメントを保存するときに、Button コントロールをプログラムで削除します。

ドキュメントを保存するときにボタン コントロールを削除するには

  1. ThisAddIn.cs または ThisAddIn.vb コード ファイルで、次のメソッドを ThisAddIn クラスに追加します。 このメソッドは、 DocumentBeforeSave イベントのイベント ハンドラーです。 保存されるドキュメントに Document ホスト項目が関連付けられている場合、イベント ハンドラーはホスト項目を取得し、 Button コントロールが存在する場合にそれを削除します。

    private void Application_DocumentBeforeSave(Word.Document Doc, 
        ref bool SaveAsUI, ref bool Cancel)
    {
        bool isExtended = Globals.Factory.HasVstoObject(Doc);
    
    
        if (isExtended)
        {
    
            Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(Doc);
    
            if (vstoDocument.Controls.Contains(button))
            {
                vstoDocument.Controls.Remove(button);
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
            }
        }
    }
    
  2. C# では、 ThisAddIn_Startup イベント ハンドラーに次のコードを追加します。 C# では、 Application_DocumentBeforeSave イベント ハンドラーを DocumentBeforeSave イベントに接続するためにこのコードが必要です。

    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
    

ユーザーがリボンのチェック ボックスをクリックしたときにコントロールを追加または削除する

最後に、リボンに追加したチェック ボックスの Click イベント ハンドラーに対し、ドキュメント上のコントロールを追加または削除するための変更を加えます。

ユーザーがリボンのチェック ボックスをクリックしたときにコントロールを追加または削除するには

  1. MyRibbon.cs または MyRibbon.vb コード ファイルで、生成された addButtonCheckBox_Click および addRichTextCheckBox_Click イベント ハンドラーを次のコードで置き換えます。 このコードは、このチュートリアルの前半で ToggleButtonOnDocument クラスに追加した ToggleRichTextControlOnDocument および ThisAddIn メソッドを呼び出すように、これらのイベント ハンドラーを再定義します。

    private void addButtonCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleButtonOnDocument();
    }
    
    private void addRichTextCheckBox_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.ToggleRichTextControlOnDocument();
    }
    

ソリューションをテストする

リボンのカスタム タブからコントロールを選んでドキュメントに追加します。 ドキュメントを保存すると、 Button コントロールが削除されます。

ソリューションをテストするには

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

  2. アクティブなドキュメントで Enter キーを何度か押して、ドキュメントに新しい空の段落を追加します。

  3. 最初の段落を選びます。

  4. [アドイン] タブをクリックします。

  5. [コントロールの追加] グループで [ボタンの追加]をクリックします。

    最初の段落にボタンが表示されます。

  6. 最後の段落を選びます。

  7. [コントロールの追加] グループで [リッチ テキスト コントロールの追加]をクリックします。

    リッチ テキスト コンテンツのコントロールが最後の段落に追加されます。

  8. ドキュメントを保存します。

    ボタンがドキュメントから削除されます。

次のステップ

VSTO アドインのコントロールについて詳しくは、次の各トピックをご覧ください。