次の方法で共有


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

ドキュメント レベルの Word プロジェクトでは、デザイン時または実行時にプロジェクトの文書にコンテンツ コントロールを追加できます。 アプリケーション レベルの Word プロジェクトでは、実行時にコンテンツ コントロールを任意の開いている文書に追加できます。

対象: このトピックの情報は、Word 2007 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

このトピックでは、次のタスクについて説明します。

  • デザイン時におけるコンテンツ コントロールの追加

  • 実行時にコンテンツ コントロールをドキュメント レベルのプロジェクトに追加する

  • 実行時にコンテンツ コントロールをアプリケーション レベルのプロジェクトに追加する

コンテンツ コントロールの詳細については、「コンテンツ コントロール」を参照してください。

デザイン時におけるコンテンツ コントロールの追加

デザイン時にドキュメント レベルのプロジェクトの文書にコンテンツ コントロールを追加する方法はいくつかあります。

注意

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

[ツールボックス] を使用してコンテンツ コントロールを文書に追加するには

  1. Visual Studio デザイナーでホストされている文書で、コンテンツ コントロールを配置する位置にカーソルを置くか、コンテンツ コントロールに置き換えるテキストを選択します。

  2. ツールボックスを開き、[Word コントロール] タブをクリックします。

  3. 次のいずれかの方法でコントロールを追加します。

    • [ツールボックス] のコンテンツ コントロールをダブルクリックする。

      または

    • [ツールボックス] のコンテンツ コントロールをクリックし、Enter キーを押す。

      または

    • [ツールボックス] からコンテンツ コントロールを文書にドラッグする。 コンテンツ コントロールがマウス ポインターの位置ではなく文書内の現在選択されている位置に追加されます。

注意

[ツールボックス] を使用して GroupContentControl を追加することはできません。 Word を開いているとき、または実行時には、GroupContentControl のみ追加できます。

注意

Visual Studio では、Word 2010 プロジェクト用のツールボックスにチェック ボックス コンテンツ コントロールが用意されていません。 チェック ボックス コンテンツ コントロールを文書に追加するには、プログラム上で ContentControl オブジェクトを作成する必要があります。 詳細については、「コンテンツ コントロール」を参照してください。

Word でコンテンツ ページを文書に追加するには

  1. Visual Studio デザイナーでホストされている文書で、コンテンツ コントロールを配置する位置にカーソルを置くか、コンテンツ コントロールに置き換えるテキストを選択します。

  2. リボンの [開発] タブをクリックします。

    注意

    [開発] タブが表示されていない場合は、最初にこれを表示する必要があります。 詳細については、「方法 : [開発] タブをリボンに表示する」を参照してください。

  3. [コントロール] グループで、追加するコンテンツ コントロールのアイコンをクリックします。

実行時にコンテンツ コントロールをドキュメント レベルのプロジェクトに追加する

プロジェクトの ThisDocument クラスの Controls プロパティを使用して、実行時にプログラムによってコンテンツ コントロールを文書に追加できます。 各メソッドに 3 つのオーバーロードがあり、それらを使用して次の方法でコンテンツ コントロールを追加できます。

  • 現在選択されている位置にコントロールを追加する。

  • 指定した範囲にコントロールを追加する。

  • 文書内のネイティブなコンテンツ コントロールに基づくコントロールを追加する。

動的に作成したコンテンツ コントロールは、文書を閉じたときに文書に保持されません。 ただし、ネイティブなコンテンツ コントロールは文書に残ります。 次に文書を開いたときに、ネイティブなコンテンツ コントロールに基づいてコンテンツ コントロールを再作成できます。 詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。

注意

チェック ボックス コンテンツ コントロールを Word 2010 プロジェクトの文書に追加するには、ContentControl オブジェクトを作成する必要があります。 詳細については、「コンテンツ コントロール」を参照してください。

現在選択されている位置にコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で、新しいコントロールの名前を示す 1 つのパラメーターを持つ ControlCollection メソッドを使用します。

    ControlCollection.AddRichTextContentControl(String) メソッドを使用して文書の先頭に新しい RichTextContentControl を追加するコード例を次に示します。 このコードを実行するには、プロジェクトの ThisDocument クラスにコードを追加し、ThisDocument_Startup イベント ハンドラーから AddRichTextControlAtSelection メソッドを呼び出します。

    Dim richTextControl1 As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddRichTextControlAtSelection()
        Me.Paragraphs(1).Range.InsertParagraphBefore()
        Me.Paragraphs(1).Range.Select()
        richTextControl1 = Me.Controls.AddRichTextContentControl("richTextControl1")
        richTextControl1.PlaceholderText = "Enter your first name"
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1;
    
    private void AddRichTextControlAtSelection()
    {
        this.Paragraphs[1].Range.InsertParagraphBefore();
        this.Paragraphs[1].Range.Select();
    
        richTextControl1 = this.Controls.AddRichTextContentControl("richTextControl1");
        richTextControl1.PlaceholderText = "Enter your first name";
    }
    

指定した範囲にコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で Microsoft.Office.Interop.Word.Range パラメーターを持つ、ControlCollection メソッドを使用します。

    ControlCollection.AddRichTextContentControl(Range, String) メソッドを使用して文書の先頭に新しい RichTextContentControl を追加するコード例を次に示します。 このコードを実行するには、プロジェクトの ThisDocument クラスにコードを追加し、ThisDocument_Startup イベント ハンドラーから AddRichTextControlAtRange メソッドを呼び出します。

    Dim richTextControl2 As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddRichTextControlAtRange()
        Me.Paragraphs(1).Range.InsertParagraphBefore()
        richTextControl2 = Me.Controls.AddRichTextContentControl(Me.Paragraphs(1).Range, _
            "richTextControl2")
        richTextControl2.PlaceholderText = "Enter your first name"
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2;
    
    private void AddRichTextControlAtRange()
    {
        this.Paragraphs[1].Range.InsertParagraphBefore();
    
        richTextControl2 = this.Controls.AddRichTextContentControl(this.Paragraphs[1].Range,
            "richTextControl2");
        richTextControl2.PlaceholderText = "Enter your first name";
    }
    

文書内のネイティブなコンテンツ コントロールに基づくコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で、Microsoft.Office.Interop.Word.ContentControl パラメーターを持つ ControlCollection メソッドを使用します。

    次のコード例では、ControlCollection.AddRichTextContentControl(ContentControl, String) メソッドを使用して、文書内にあるネイティブなリッチ テキスト コントロールごとに新しい RichTextContentControl を作成します。 このコードを実行するには、プロジェクトの ThisDocument クラスにコードを追加し、ThisDocument_Startup イベント ハンドラーから CreateRichTextControlsFromNativeControls メソッドを呼び出します。

    Private richTextControls As New System.Collections.Generic.List _
            (Of Microsoft.Office.Tools.Word.RichTextContentControl)
    
    Private Sub CreateRichTextControlsFromNativeControls()
        If Me.ContentControls.Count <= 0 Then
            Return
        End If
    
        Dim count As Integer = 0
        For Each nativeControl As Word.ContentControl In Me.ContentControls
            If nativeControl.Type = Word.WdContentControlType.wdContentControlRichText Then
                count += 1
                Dim tempControl As Microsoft.Office.Tools.Word.RichTextContentControl = _
                    Me.Controls.AddRichTextContentControl(nativeControl, _
                    "VSTORichTextContentControl" + count.ToString())
                richTextControls.Add(tempControl)
            End If
        Next nativeControl
    End Sub
    
    private System.Collections.Generic.List
        <Microsoft.Office.Tools.Word.RichTextContentControl> richTextControls;
    
    private void CreateRichTextControlsFromNativeControls()
    {
        if (this.ContentControls.Count <= 0)
            return;
    
        richTextControls = new System.Collections.Generic.List
            <Microsoft.Office.Tools.Word.RichTextContentControl>();
        int count = 0;
    
        foreach (Word.ContentControl nativeControl in this.ContentControls)
        {
            if (nativeControl.Type ==
                Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText)
            {
                count++;
                Microsoft.Office.Tools.Word.RichTextContentControl tempControl =
                    this.Controls.AddRichTextContentControl(nativeControl,
                    "VSTORichTextControl" + count.ToString());
                richTextControls.Add(tempControl);
            }
        }
    }
    

実行時にコンテンツ コントロールをアプリケーション レベルのプロジェクトに追加する

アプリケーション レベルのアドインを使用することにより、実行時にプログラムによってコンテンツ コントロールを任意の開いている文書に追加できます。 そのためには、開いている文書に基づく Document ホスト項目を生成し、このホスト項目の Controls プロパティのメソッドを使用します。 各メソッドに 3 つのオーバーロードがあり、それらを使用して次の方法でコンテンツ コントロールを追加できます。

  • 現在選択されている位置にコントロールを追加する。

  • 指定した範囲にコントロールを追加する。

  • 文書内のネイティブなコンテンツ コントロールに基づくコントロールを追加する。

動的に作成したコンテンツ コントロールは、文書を閉じたときに文書に保持されません。 ただし、ネイティブなコンテンツ コントロールは文書に残ります。 次に文書を開いたときに、ネイティブなコンテンツ コントロールに基づいてコンテンツ コントロールを再作成できます。 詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。

アプリケーション レベルのプロジェクトでホスト項目を生成する方法の詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。

注意

チェック ボックス コンテンツ コントロールを Word 2010 プロジェクトの文書に追加するには、ContentControl オブジェクトを作成する必要があります。 詳細については、「コンテンツ コントロール」を参照してください。

現在選択されている位置にコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で、新しいコントロールの名前を示す 1 つのパラメーターを持つ ControlCollection メソッドを使用します。

    ControlCollection.AddRichTextContentControl(String) メソッドを使用してアクティブな文書の先頭に新しい RichTextContentControl を追加するコード例を次に示します。 このコードを実行するには、プロジェクトの ThisAddIn クラスにコードを追加し、ThisAddIn_Startup イベント ハンドラーから AddRichTextControlAtSelection メソッドを呼び出します。

    Dim richTextControl1 As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddRichTextControlAtSelection()
        Dim currentDocument As Word.Document = Me.Application.ActiveDocument
        currentDocument.Paragraphs(1).Range.InsertParagraphBefore()
        currentDocument.Paragraphs(1).Range.Select()
    
        ' Use the following line of code in projects that target the .NET Framework 4.
        Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
    
        ' In projects that target the .NET Framework 3.5, use the following line of code.
        ' Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
        richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1")
        richTextControl1.PlaceholderText = "Enter your first name"
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1;
    
    private void AddRichTextControlAtSelection()
    {
        Word.Document currentDocument = this.Application.ActiveDocument;
        currentDocument.Paragraphs[1].Range.InsertParagraphBefore();
        currentDocument.Paragraphs[1].Range.Select();
    
        // Use the following line of code in projects that target the .NET Framework 4.
        Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
    
        // In projects that target the .NET Framework 3.5, use the following line of code.
        // Document extendedDocument = currentDocument.GetVstoObject();
    
        richTextControl1 = extendedDocument.Controls.AddRichTextContentControl("richTextControl1");
        richTextControl1.PlaceholderText = "Enter your first name";
    }
    

指定した範囲にコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で Microsoft.Office.Interop.Word.Range パラメーターを持つ、ControlCollection メソッドを使用します。

    ControlCollection.AddRichTextContentControl(Range, String) メソッドを使用してアクティブな文書の先頭に新しい RichTextContentControl を追加するコード例を次に示します。 このコードを実行するには、プロジェクトの ThisAddIn クラスにコードを追加し、ThisAddIn_Startup イベント ハンドラーから AddRichTextControlAtRange メソッドを呼び出します。

    Dim richTextControl2 As Microsoft.Office.Tools.Word.RichTextContentControl
    
    Private Sub AddRichTextControlAtRange()
        Dim currentDocument As Word.Document = Me.Application.ActiveDocument
        currentDocument.Paragraphs(1).Range.InsertParagraphBefore()
    
        ' Use the following line of code in projects that target the .NET Framework 4.
        Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
    
        ' In projects that target the .NET Framework 3.5, use the following line of code.
        ' Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
        richTextControl2 = extendedDocument.Controls.AddRichTextContentControl( _
            extendedDocument.Paragraphs(1).Range, "richTextControl2")
        richTextControl2.PlaceholderText = "Enter your first name"
    End Sub
    
    private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2;
    
    private void AddRichTextControlAtRange()
    {
        Word.Document currentDocument = this.Application.ActiveDocument;
        currentDocument.Paragraphs[1].Range.InsertParagraphBefore();
    
        // Use the following line of code in projects that target the .NET Framework 4.
        Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
    
        // In projects that target the .NET Framework 3.5, use the following line of code.
        // Document extendedDocument = currentDocument.GetVstoObject();
    
        richTextControl2 = extendedDocument.Controls.AddRichTextContentControl(
            currentDocument.Paragraphs[1].Range, "richTextControl2");
        richTextControl2.PlaceholderText = "Enter your first name";
    }
    

文書内のネイティブなコンテンツ コントロールに基づくコンテンツ コントロールを追加するには

  • 名前が Add<control class> (control class は追加するコンテンツ コントロールのクラス名であり、AddRichTextContentControl などとなります) で、Microsoft.Office.Interop.Word.ContentControl パラメーターを持つ ControlCollection メソッドを使用します。

    次のコード例では、文書を開いた後、ControlCollection.AddRichTextContentControl(ContentControl, String) メソッドを使用して、文書内にあるネイティブなリッチ テキスト コントロールごとに新しい RichTextContentControl を作成します。 このコードを実行するには、コードをプロジェクトの ThisAddIn クラスに追加します。

    Private richTextControls As New System.Collections.Generic.List _
        (Of Microsoft.Office.Tools.Word.RichTextContentControl)
    
    Private Sub Application_DocumentOpen(ByVal Doc As Microsoft.Office.Interop.Word.Document) _
        Handles Application.DocumentOpen
    
        If Doc.ContentControls.Count > 0 Then
    
            ' Use the following line of code in projects that target the .NET Framework 4.
            Dim extendedDocument As Document = Globals.Factory.GetVstoObject(Doc)
    
            ' In projects that target the .NET Framework 3.5, use the following line of code.
            ' Dim extendedDocument As Document = Doc.GetVstoObject()
    
            Dim count As Integer = 0
            For Each nativeControl As Word.ContentControl In Doc.ContentControls
                If nativeControl.Type = Word.WdContentControlType.wdContentControlRichText Then
                    count += 1
                    Dim tempControl As Microsoft.Office.Tools.Word.RichTextContentControl = _
                        extendedDocument.Controls.AddRichTextContentControl(nativeControl, _
                        "VSTORichTextContentControl" + count.ToString())
                    richTextControls.Add(tempControl)
                End If
            Next nativeControl
        End If
    End Sub
    
    private System.Collections.Generic.List
        <Microsoft.Office.Tools.Word.RichTextContentControl> richTextControls;
    
    private void Application_DocumentOpen(Microsoft.Office.Interop.Word.Document Doc)
    {
        if (Doc.ContentControls.Count > 0)
        {
            // Use the following line of code in projects that target the .NET Framework 4.
            Document extendedDocument = Globals.Factory.GetVstoObject(Doc);
    
            // In projects that target the .NET Framework 3.5, use the following line of code.
            // Document extendedDocument = Doc.GetVstoObject();
    
            richTextControls = new System.Collections.Generic.List
                <Microsoft.Office.Tools.Word.RichTextContentControl>();
            int count = 0;
    
            foreach (Word.ContentControl nativeControl in Doc.ContentControls)
            {
                if (nativeControl.Type ==
                    Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText)
                {
                    count++;
                    Microsoft.Office.Tools.Word.RichTextContentControl tempControl =
                        extendedDocument.Controls.AddRichTextContentControl(nativeControl,
                        "VSTORichTextControl" + count.ToString());
                    richTextControls.Add(tempControl);
                }
            }
        }
    }
    

    C# では、さらに Application_DocumentOpen イベント ハンドラーを DocumentOpen イベントに追加する必要があります。

    this.Application.DocumentOpen +=
        new Word.ApplicationEvents4_DocumentOpenEventHandler(Application_DocumentOpen);
    

参照

概念

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

ホスト項目とホスト コントロールの概要

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

ホスト項目およびホスト コントロールのプログラム上の制限事項

アプリケーション レベルのアドインのプログラミング

ドキュメント レベルのカスタマイズのプログラミング

ホスト コントロールのヘルパー メソッド