次の方法で共有


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

更新 : 2008 年 7 月

対象

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

プロジェクトの種類

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

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

Microsoft Office のバージョン

  • Word 2007

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

ドキュメント レベルのプロジェクトでは、デザイン時または実行時にプロジェクトの文書にコンテンツ コントロールを追加できます。Visual Studio 2008 Service Pack 1 (SP1) では、Word 2007 用のアプリケーション レベルのアドインを使用して、実行時にコンテンツ コントロールを任意の開いている文書に追加できるようになりました。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      または

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

      または

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 名前が 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);
            }
        }
    }
    

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

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

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

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

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

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

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

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

  • 名前が 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()
    
        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();
    
        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()
    
        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();
    
        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
            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)
        {
            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);
    

参照

概念

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

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

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

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

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

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

その他の技術情報

Word ホスト コントロール

変更履歴

[日付]

[履歴]

原因

2008 年 7 月

アプリケーション レベルのアドインに関する手順を追加

SP1 機能変更