次の方法で共有


チュートリアル : 実行時におけるアプリケーション レベルのアドインの文書へのコントロールの追加

更新 : 2008 年 7 月

対象

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

プロジェクトの種類

  • アプリケーション レベルのプロジェクト

Microsoft Office のバージョン

  • Word 2007

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

Visual Studio 2008 Service Pack 1 (SP1) 以降、アプリケーション レベルのアドインを使用して、任意の開いている Microsoft Office Word 2007 文書にコントロールを追加できるようになりました。このチュートリアルでは、リボンを使用してユーザーが文書に Button または RichTextContentControl を追加できるようにする方法を説明します。

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

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

  • 文書にコントロールを追加するためのユーザー インターフェイス (UI: User Interface) を提供する。

  • 実行時に文書にコントロールを追加する。

  • 文書からコントロールを削除する。

Cc668206.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 のオプションの要素)

  • Visual Studio 2008 SP1

  • Microsoft Office Word 2007

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

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

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

文書にコントロールを追加するための UI の提供

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

文書にコントロールを追加するための UI を提供するには

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

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

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

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

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

  5. [プロパティ] ウィンドウで、[group1]Label プロパティを Add Controls に変更します。

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

  7. [CheckBox1] をクリックして選択します。

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

    プロパティ

    Name

    addButtonComboBox

    Label

    ボタンの追加

  9. group1 に 2 つ目のチェック ボックスを追加し、次のプロパティを変更します。

    プロパティ

    Name

    addRichTextCheckBox

    Label

    リッチ テキスト コントロールの追加

  10. リボン デザイナで [ボタンの追加] をダブルクリックします。

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

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

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

このチュートリアルの後の手順で、これらのイベント ハンドラに、アクティブな文書上でコントロールの追加や削除を行うためのコードを追加します。

アクティブな文書上でのコントロールの追加と削除

アドインのコードでは、コントロールを追加できるようにするには、アクティブな文書を Microsoft.Office.Tools.Word.Documentホスト項目に変換する必要があります。Visual Studio Tools for Office ソリューションでは、マネージ コントロールは、そのコントロールのコンテナとして機能するホスト項目に対してのみ追加できます。アプリケーション レベルのアドイン プロジェクトでは、ホスト項目は GetVstoObject メソッドを使用して実行時にのみ作成できます。

メソッドを ThisAddIn クラスに追加します。このクラスを呼び出して、アクティブな文書に対して Button または RichTextContentControl の追加や削除を実行できます。このチュートリアルの後の手順で、リボンのチェック ボックスの Click イベント ハンドラから、これらのメソッドを呼び出します。

アクティブな文書でコントロールの追加や削除を行うには

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

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

    Private button As Microsoft.Office.Tools.Word.Controls.Button = Nothing
    Private richTextControl As RichTextContentControl = Nothing
    
    private Microsoft.Office.Tools.Word.Controls.Button button = null;
    private RichTextContentControl richTextControl = null;
    
  3. ThisAddIn クラスに次のメソッドを追加します。ユーザーがリボンの [ボタンの追加] チェック ボックスをクリックした場合、チェック ボックスがオンになると、このメソッドにより、文書上で現在選択されている位置に Button が追加されます。チェック ボックスがオフになると、Button が削除されます。

    Friend Sub ToggleButtonOnDocument()
        Dim nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
        Dim vstoDocument As Document = nativeDocument.GetVstoObject()
        Dim name As String = "MyButton"
    
        If Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked Then
            If Globals.ThisAddIn.Application.Selection IsNot Nothing Then
                button = vstoDocument.Controls.AddButton( _
                    Globals.ThisAddIn.Application.Selection.Range, 100, 30, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    internal void ToggleButtonOnDocument()
    {
        Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument;
        Document vstoDocument = nativeDocument.GetVstoObject();
        string name = "MyButton";
    
        if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked)
        {
            if (Globals.ThisAddIn.Application.Selection != null)
            {
                button = vstoDocument.Controls.AddButton(
                    Globals.ThisAddIn.Application.Selection.Range, 100, 30, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    
  4. ThisAddIn クラスに次のメソッドを追加します。ユーザーがリボンの [リッチ テキスト コントロールの追加] チェック ボックスをクリックした場合、チェック ボックスがオンになると、このメソッドにより、文書上で現在選択されている位置に RichTextContentControl が追加されます。チェック ボックスがオフになると、RichTextContentControl が削除されます。

    Friend Sub ToggleRichTextControlOnDocument()
        Dim nativeDocument As Word.Document = Globals.ThisAddIn.Application.ActiveDocument
        Dim vstoDocument As Document = nativeDocument.GetVstoObject()
        Dim name As String = "MyRichTextBoxControl"
    
        If Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked Then
            If Globals.ThisAddIn.Application.Selection IsNot Nothing Then
                richTextControl = vstoDocument.Controls.AddRichTextContentControl( _
                        Globals.ThisAddIn.Application.Selection.Range, name)
            End If
        Else
            vstoDocument.Controls.Remove(name)
        End If
    End Sub
    
    internal void ToggleRichTextControlOnDocument()
    {
        Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument;
        Document vstoDocument = nativeDocument.GetVstoObject();
        string name = "MyRichTextBoxControl";
    
        if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
        {
            if (Globals.ThisAddIn.Application.Selection != null)
            {
                richTextControl = vstoDocument.Controls.AddRichTextContentControl(
                    Globals.ThisAddIn.Application.Selection.Range, name);
            }
        }
        else
        {
            vstoDocument.Controls.Remove(name);
        }
    }
    

文書保存時におけるボタン コントロールの削除

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

文書が保存されるときにボタン コントロールを削除するには

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

    Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
        ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles Application.DocumentBeforeSave
        If Doc.HasVstoObject() Then
            Dim vstoDocument As Document = Doc.GetVstoObject()
            If vstoDocument.Controls.Contains(button) Then
                vstoDocument.Controls.Remove(button)
                Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = False
            End If
        End If
    End Sub
    
    private void Application_DocumentBeforeSave(Word.Document Doc, 
        ref bool SaveAsUI, ref bool Cancel)
    {
        if (Doc.HasVstoObject())
        {
            Document vstoDocument = Doc.GetVstoObject();
    
            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 イベント ハンドラを変更します。

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

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

    Private Sub addButtonCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addButtonCheckBox.Click
        Globals.ThisAddIn.ToggleButtonOnDocument()
    End Sub
    
    Private Sub addRichTextCheckBox_Click(ByVal sender As System.Object, _
        ByVal e As RibbonControlEventArgs) Handles addRichTextCheckBox.Click
        Globals.ThisAddIn.ToggleRichTextControlOnDocument()
    End Sub
    
    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. [Add Controls] グループで、[ボタンの追加] をクリックします。

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

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

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

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

  8. 文書を保存します。

    文書からボタンが削除されます。

次の手順

アプリケーション レベルのアドインのコントロールの詳細については、次の各トピックを参照してください。

参照

処理手順

方法 : Office ドキュメントに Windows フォーム コントロールを追加する

方法 : Word 文書にコンテンツ コントロールを追加する

Word アドインのダイナミック コントロールのサンプル

概念

Word のアプリケーション レベルのアドインの開発

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

Office ドキュメントでのダイナミック コントロールの永続化

アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張

履歴の変更

日付

履歴

理由

2008 年 7 月

トピックを追加

SP1 機能変更