方法 : Word 文書にコンテンツ コントロールを追加する
ドキュメント レベルの Word プロジェクトでは、デザイン時または実行時にプロジェクトの文書にコンテンツ コントロールを追加できます。アプリケーション レベルの Word プロジェクトでは、実行時にコンテンツ コントロールを任意の開いている文書に追加できます。
対象: このトピックの情報は、Word 2013 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このトピックでは、次のタスクについて説明します。
デザイン時におけるコンテンツ コントロールの追加
実行時にコンテンツ コントロールをドキュメント レベルのプロジェクトに追加する
実行時にコンテンツ コントロールをアプリケーション レベルのプロジェクトに追加する
コンテンツ コントロールの詳細については、「コンテンツ コントロール」を参照してください。
デザイン時におけるコンテンツ コントロールの追加
デザイン時にドキュメント レベルのプロジェクトの文書にコンテンツ コントロールを追加する方法はいくつかあります。
[ツールボックス] の [Word コントロール] タブからコンテンツ コントロールを追加する。
Word でネイティブなコンテンツ コントロールを追加する場合と同じ方法で、コンテンツ コントロールを文書に追加する。
[データ ソース] ウィンドウから文書にコンテンツ コントロールをドラッグする。この方法は、コントロールを作成と同時にデータにバインドする場合に役立ちます。詳細については、「方法 : オブジェクトのデータをドキュメントに読み込む」および「方法 : データベースからドキュメントにデータを読み込む」を参照してください。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
[ツールボックス] を使用してコンテンツ コントロールを文書に追加するには
Visual Studio デザイナーでホストされている文書で、コンテンツ コントロールを配置する位置にカーソルを置くか、コンテンツ コントロールに置き換えるテキストを選択します。
ツールボックスを開き、[Word コントロール] タブをクリックします。
次のいずれかの方法でコントロールを追加します。
[ツールボックス] のコンテンツ コントロールをダブルクリックする。
または
[ツールボックス] のコンテンツ コントロールをクリックし、Enter キーを押す。
または
[ツールボックス] からコンテンツ コントロールを文書にドラッグする。コンテンツ コントロールがマウス ポインターの位置ではなく文書内の現在選択されている位置に追加されます。
[!メモ]
[ツールボックス] を使用して GroupContentControl を追加することはできません。Word を開いているとき、または実行時には、GroupContentControl のみ追加できます。
[!メモ]
Visual Studioは、Word 2013 およびWord 2010プロジェクトには、ツールボックスのチェック ボックス コンテンツ コントロールが用意されていません。チェック ボックス コンテンツ コントロールを文書に追加するには、プログラム上で ContentControl オブジェクトを作成する必要があります。詳細については、「コンテンツ コントロール」を参照してください。
Word でコンテンツ ページを文書に追加するには
Visual Studio デザイナーでホストされている文書で、コンテンツ コントロールを配置する位置にカーソルを置くか、コンテンツ コントロールに置き換えるテキストを選択します。
リボンの [開発] タブをクリックします。
[!メモ]
[開発] タブが表示されていない場合は、最初にこれを表示する必要があります。詳細については、「方法 : [開発] タブをリボンに表示する」を参照してください。
[コントロール] グループで、追加するコンテンツ コントロールのアイコンをクリックします。
実行時にコンテンツ コントロールをドキュメント レベルのプロジェクトに追加する
プロジェクトの 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 2013 または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() Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument) 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 = Globals.Factory.GetVstoObject(currentDocument); 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 = Globals.Factory.GetVstoObject(currentDocument) 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 = Globals.Factory.GetVstoObject(currentDocument); 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 = Globals.Factory.GetVstoObject(Doc) 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 = Globals.Factory.GetVstoObject(Doc); 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);
参照
概念
ホスト項目およびホスト コントロールのプログラム上の制限事項