次の方法で共有


コンテンツ コントロール

コンテンツ コントロールは、次の機能を備えるドキュメントとテンプレートを設計する方法を提供します。

コンテンツ コントロールについて

コンテンツ コントロールは、ユーザー入力と印刷の両方に最適化された UI を提供します。 コンテンツ コントロールをドキュメントに追加すると、ユーザーに指示を提供できる罫線、タイトル、一時テキストによってコントロールが識別されます。 罫線とコントロールのタイトルは、文書の印刷バージョンには表示されません。

たとえば、ユーザーがドキュメントのセクションに日付を入力する場合は、日付選択コンテンツ コントロールをドキュメントに追加できます。 ユーザーがコントロールをクリックすると、標準の日付選択 UI が表示されます。 コントロールのプロパティを設定して、表示される地域カレンダーを設定したり、日付形式を指定したりすることもできます。 ユーザーが日付を選択すると、コントロールの UI は非表示になり、ユーザーがドキュメントを印刷した場合にのみ日付が表示されます。

コンテンツ コントロールは、次の操作にも役立ちます。

  • ユーザーがドキュメントの一部を編集または削除できないようにします。 これは、ドキュメントまたはテンプレートに、ユーザーが読み取ることができるが編集できない情報がある場合や、ユーザーがコンテンツ コントロールを編集できても削除できないようにする場合に便利です。

  • ドキュメントまたはテンプレートの一部をデータにバインドします。 コンテンツ コントロールは、データベース フィールド、.NET Framework のマネージド オブジェクト、ドキュメントに格納されている XML 要素、およびその他のデータ ソースにバインドできます。

    ドキュメント レベルのプロジェクトでは、デザイン時または実行時にコンテンツ コントロールをドキュメントに追加できます。 VSTO アドイン プロジェクトでは、実行時に開いている任意のドキュメントにコンテンツ コントロールを追加できます。 詳細については、「 方法: Word 文書にコンテンツ コントロールを追加する」を参照してください

コンテンツ コントロールは、Open XML 形式で保存されているドキュメントでのみ使用できます。 Word 97-2003 文書 (.doc) 形式で保存されている文書では、コンテンツ コントロールを使用できません。

コンテンツ コントロールの種類

ドキュメントに追加できるコンテンツ コントロールには、9 種類あります。 ほとんどのコンテンツ コントロールは、 Microsoft.Office.Tools.Word 名前空間に対応する型を持っています。 使用可能な任意のコンテンツ コントロールを表すことができる汎用 ContentControlを使用することもできます。 使用可能な各コンテンツ コントロールの使用方法を示すチュートリアルについては、「 チュートリアル: コンテンツ コントロールを使用してテンプレートを作成する」を参照してください。

文書パーツ ギャラリーでは、ユーザーがドキュメントに挿入する文書パーツの一覧から選択できます。 ドキュメント文書パーツは、共通の表紙、書式設定されたテーブル、ヘッダーなど、複数回使用するために作成されたコンテンツです。 詳細については、 BuildingBlockGalleryContentControl の種類を参照してください。 文書パーツの詳細については、「 Word 2007 の開発者向けの新機能」を参照してください。

チェック ボックス

チェック ボックスには、バイナリ状態を表す UI (選択済みまたはクリア済み) が表示されます。

他の種類のコンテンツ コントロールとは異なり、Visual Studio Tools for Office ランタイムには、チェック ボックス コンテンツ コントロールを表す特定の種類は用意されていません。 つまり、 CheckBoxContentControl 型はありません。 ただし、プログラムを使用してドキュメントに汎用 ContentControl を追加することで、チェック ボックス コンテンツ コントロールを作成することはできます。 詳細については、「 Word プロジェクトのチェック ボックス コンテンツ コントロール」を参照してください。

コンボ ボックス

コンボ ボックスには、ユーザーが選択できる項目の一覧が表示されます。 ドロップダウン リストとは異なり、コンボ ボックスを使用すると、ユーザーは独自の項目を追加できます。 詳細については、 ComboBoxContentControl の種類を参照してください。

日付選択ツール

日付ピッカーは、日付を選択するためのカレンダー UI を提供します。 エンド ユーザーがコントロールのドロップダウン矢印をクリックすると、カレンダーが表示されます。 地域カレンダーやさまざまな日付形式を使用できます。 詳細については、 DatePickerContentControl の種類を参照してください。

ドロップダウン リストには、ユーザーが選択できる項目の一覧が表示されます。 コンボ ボックスとは異なり、ドロップダウン リストでは、ユーザーはアイテムを追加または編集できません。 詳細については、 DropDownListContentControl の種類を参照してください。

グループ

グループ コントロールは、ユーザーが編集または削除できないドキュメントの保護された領域を定義します。 グループ コントロールには、テキスト、テーブル、グラフィックス、その他のコンテンツ コントロールなど、任意のドキュメント アイテムを含めることができます。 詳細については、 GroupContentControl の種類を参照してください。

画像

画像コントロールに画像が表示されます。 デザイン時または実行時にイメージを指定することも、ユーザーがこのコントロールをクリックして、ドキュメントに挿入する画像を選択することもできます。 詳細については、 PictureContentControl の種類を参照してください。

リッチ テキスト

リッチ テキスト コントロールには、テキストまたはその他の項目 (表、図、その他のコンテンツ コントロールなど) が含まれます。 詳細については、 RichTextContentControl の種類を参照してください。

プレーンテキスト

プレーン テキスト コントロールにはテキストが含まれています。 プレーンテキスト コントロールには、テーブル、図、その他のコンテンツ コントロールなどの他の項目を含めることはできません。 さらに、プレーン テキスト コントロール内のすべてのテキストの書式は同じです。 たとえば、プレーン テキスト コントロール内の文の 1 つの単語を斜体にすると、コントロール内のすべてのテキストが斜体になります。 詳細については、 PlainTextContentControl の種類を参照してください。

汎用コンテンツ コントロール

汎用コンテンツ コントロールは、使用可能な任意の種類のコンテンツ コントロールを表すことができる ContentControl オブジェクトです。 ContentControl プロパティを使用して、Type オブジェクトを別の種類のコンテンツ コントロールのように動作するように変更できます。 たとえば、プレーン テキスト コントロールを表す ContentControl オブジェクトを作成する場合は、実行時にコンボ ボックスのように動作するように変更できます。

ContentControlオブジェクトは実行時にのみ作成でき、デザイン時には作成できません。 詳細については、「 方法: Word 文書にコンテンツ コントロールを追加する」を参照してください

コンテンツ コントロールの一般的な機能

ほとんどのコンテンツ コントロールは、一般的なタスクの実行に使用できるメンバーのセットを共有します。 次の表に、これらのメンバーを使用して実行できるタスクの一部を示します。

このタスクの場合: これを行います。
コントロールに表示されるテキストを取得または設定します。 Text プロパティを使用します。 手記:PictureContentControl型とContentControl型には、このプロパティがありません。
ユーザーがコントロールを編集するか、コントロールにデータ ソースのデータが入力されるか、コントロールの内容が削除されるまで、コントロールに表示される一時テキストを取得または設定します。 PlaceholderText プロパティを使用します。 手記:PictureContentControl型には、このプロパティがありません。
ユーザーがクリックしたときにコンテンツ コントロールの境界線に表示されるタイトルを取得または設定します。 Title プロパティを使用します。
ユーザーがコントロールを編集した後、ドキュメントからコントロールを自動的に削除します。 (コントロール内のテキストはドキュメントに残ります)。 Temporary プロパティを使用します。
ユーザーがコンテンツ コントロール内をクリックしたとき、またはカーソルがプログラムによってコンテンツ コントロールに移動されたときにコードを実行します。 コントロールの Entering イベントを処理します。
ユーザーがコンテンツ コントロールの外部をクリックしたとき、またはカーソルがプログラムによってコンテンツ コントロールの外部に移動されたときにコードを実行します。 コントロールの Exiting イベントを処理します。
やり直し操作または元に戻す操作の結果として、コンテンツ コントロールがドキュメントに追加された後にコードを実行します。 コントロールの Added イベントを処理します。
コンテンツ コントロールがドキュメントから削除される直前にコードを実行します。 コントロールの Deleting イベントを処理します。

コンテンツ コントロールを使用してドキュメントの一部を保護する

ドキュメントの一部を保護すると、ユーザーがドキュメントのその部分のコンテンツを変更または削除できなくなります。 コンテンツ コントロールを使用してドキュメントの一部を保護するには、いくつかの方法があります。

保護する領域がコンテンツ コントロール内にある場合は、コンテンツ コントロールのプロパティを使用して、ユーザーがコントロールを編集または削除できないようにすることができます。

  • LockContents プロパティを使用すると、ユーザーはコンテンツを編集できなくなります。

  • LockContentControl プロパティを使用すると、ユーザーはコントロールを削除できなくなります。

    保護する領域がコンテンツ コントロール内にない場合、またはコンテンツ コントロールやその他の種類のコンテンツを含む領域を保護する場合は、領域全体を GroupContentControlに配置できます。 他のコンテンツ コントロールとは異なり、 GroupContentControl はユーザーに表示される UI を提供しません。 その唯一の目的は、ユーザーが編集できないリージョンを定義することです。

埋め込みコンテンツ コントロールを含む GroupContentControl を作成した場合、埋め込みコンテンツ コントロールは自動的に保護されません。 ユーザーがコンテンツを編集できないようにするには、各埋め込みコントロールの LockContents プロパティを使用する必要があります。

コンテンツ コントロールを使用してドキュメントの一部を保護する方法の詳細については、「 方法: コンテンツ コントロールを使用してドキュメントの一部を保護する」を参照してください。

データをコンテンツ コントロールにバインドする

コンテンツ コントロールをデータ ソースにバインドすることで、ドキュメント内のデータを表示できます。 データ ソースが更新されると、コンテンツ コントロールに変更が反映されます。 変更をデータ ソースに保存し直すこともできます。

コンテンツ コントロールには、次のデータ バインディング オプションがあります。

  • Windows フォームと同じデータ バインディング モデルを使用して、コンテンツ コントロールをデータベース フィールドまたはマネージド オブジェクトにバインドできます。

  • コンテンツ コントロールは、ドキュメントに埋め込まれている XML ( カスタム XML パーツとも呼ばれます) の要素にバインドできます。

    Office ソリューションのホスト コントロールをデータにバインドする方法の概要については、「Office ソリューションのコントロールにデータをバインドする」を参照してください。

Windows フォーム のデータ バインディング モデルを使用する

ほとんどのコンテンツ コントロールでは、Windows フォームで使用される単純なデータ バインディング モデルがサポートされています。 単純なデータ バインディングとは、コントロールが 1 つのデータ要素 (データ テーブルの列の値など) にバインドされることを意味します。 詳細については、「 データ バインディングと Windows フォーム」を参照してください。

ドキュメント レベルのプロジェクトでは、Visual Studio の [データ ソース] ウィンドウを使用して、コンテンツ コントロールにデータをバインドできます。 データ バインド コンテンツ コントロールをドキュメントに追加する方法の詳細については、「 方法: データベースのデータをドキュメントに設定する 」および「 方法: オブジェクトからのデータをドキュメントに設定する」を参照してください。

次の表は、[ データ ソース] ウィンドウの各データ型にバインドできるコンテンツ コントロールの一覧です。

データの種類 既定のコンテンツ コントロール このデータ型にバインドできるその他のコンテンツ コントロール
Boolean

Byte

Char

Double

Enum

Guid

Int16

Int32

Int64

SByte

Single

String

TimeSpan

UInt16

UInt32

UInt64
PlainTextContentControl BuildingBlockGalleryContentControl

ComboBoxContentControl

DatePickerContentControl

RichTextContentControl
DateTime DatePickerContentControl BuildingBlockGalleryContentControl

ComboBoxContentControl

PlainTextContentControl

RichTextContentControl
Image

Byte 配列
PictureContentControl None

ドキュメント レベルおよび VSTO アドイン プロジェクトでは、コントロールのAdd プロパティのDataBindings メソッドを使用して、コンテンツ コントロールをプログラムでデータ ソースにバインドできます。 これを行う場合は、文字列 Text メソッドの Add パラメーターに渡します。 Text プロパティは、コンテンツ コントロールの既定のデータ バインディング プロパティです。

コンテンツ コントロールでは、コントロールの変更がデータ ソースに更新される双方向データ バインディングもサポートされています。 詳細については、「 方法: ホスト コントロールからのデータを使用してデータ ソースを更新する」を参照してください。

コンテンツ コントロールは、複雑なデータ バインディングをサポートしていません。 Windows フォーム データ モデルを使用してデータ ソースに DropDownListContentControl または ComboBoxContentControl をバインドすると、ユーザーはコントロールをクリックしたときに 1 つの値のみが表示されます。 ユーザーが選択できる一連のデータ値にこれらのコントロールをバインドする場合は、カスタム XML パーツ内の要素にこれらのコントロールをバインドできます。

コンテンツ コントロールをカスタム XML パーツにバインドする

一部のコンテンツ コントロールは、ドキュメントに埋め込まれているカスタム XML パーツ内の要素にバインドできます。 カスタム XML パーツの詳細については、「 カスタム XML パーツの概要」を参照してください。

コンテンツ コントロールをカスタム XML パーツ内の要素にバインドするには、コントロールの XMLMapping プロパティを使用します。 次のコード例では、ドキュメントに既に追加されているカスタム XML パーツのPlainTextContentControl ノードの下にあるPrice要素にProductをバインドする方法を示します。

plainTextContentControl1.XMLMapping.SetMapping("/Product/Price", String.Empty, null);

コンテンツ コントロールをカスタム XML パーツにバインドする方法の詳細については、「 チュートリアル: カスタム XML パーツにコンテンツ コントロールをバインドする」を参照してください。

コンテンツ コントロールをカスタム XML パーツにバインドすると、双方向データ バインディングが自動的に有効になります。 ユーザーがコントロール内のテキストを編集すると、対応する XML 要素が自動的に更新されます。 同様に、カスタム XML 部分の要素値が変更されると、XML 要素にバインドされているコンテンツ コントロールに新しいデータが表示されます。

次の種類のコンテンツ コントロールをカスタム XML 部分にバインドできます。

コンテンツ コントロールのデータ バインド イベント

すべてのコンテンツ コントロールには、データ ソースが更新される前にコントロール内のテキストが特定の条件を満たしていることを検証するなど、データ関連のタスクを実行するために処理できる一連のイベントが用意されています。 次の表に、データ バインディングに関連するコンテンツ コントロール イベントを示します。

Task Event
カスタム XML パーツにバインドされているコンテンツ コントロール内のテキストが自動的に更新される直前に、コードを実行します。 ContentUpdating
コンテンツ コントロールにバインドされているカスタム XML パーツ (つまり、コンテンツ コントロール内のテキストが変更された後) のデータを自動的に更新する直前に、コードを実行します。 StoreUpdating
独自のコードを実行して、カスタム条件に従ってコントロールの内容を検証します。 Validating
コントロールの内容が正常に検証された後、コードを実行します。 Validated

コンテンツ コントロールの制限事項

Office プロジェクトでコンテンツ コントロールを使用する場合は、次の制限事項に注意してください。

設計時と実行時の動作の違い

Microsoft Office Word が実行時にコンテンツ コントロールに課す制限の多くは、デザイン時には適用されません。 Visual Studio でドキュメント レベルのソリューションの UI を設計する場合は、実行時にサポートされる方法でのみコンテンツ コントロールを変更してください。

実行時にコントロールがサポートされない方法でデザイン時にコンテンツ コントロールを変更した場合、Visual Studio デザイナーはサポートされていない変更について警告しません。 ただし、プロジェクトをデバッグまたは実行するとき、またはプロジェクトを保存して再度開くと、エラー メッセージが表示され、ドキュメントを修復するためのアクセス許可が要求されます。 文書を修復すると、サポートされていないすべてのコンテンツと書式設定がコントロールから削除されます。

たとえば、Word では、デザイン時にテーブルを PlainTextContentControl に追加できません。 ただし、 PlainTextContentControl オブジェクトには実行時にテーブルを含めることができないため、文書を開くとエラー メッセージが表示されます。

また、コンテンツ コントロールの動作を定義する多くのプロパティは、デザイン時には影響しません。 たとえば、デザイン時にコンテンツ コントロールの LockContents プロパティを True に設定した場合でも、Visual Studio デザイナーでコントロール内のテキストを編集できます。 このプロパティは、実行時にユーザーがコントロールを編集できないようにするだけです。

イベントの制限事項

コンテンツ コントロールは、ユーザーがコントロール内のテキストやその他の項目を変更したときに発生するイベントを提供しません。 たとえば、ユーザーが DropDownListContentControl または ComboBoxContentControlで別の項目を選択したときに発生するイベントはありません。

ユーザーがコンテンツ コントロールのコンテンツを編集するタイミングを判断するには、コントロールをカスタム XML パーツにバインドし、 StoreUpdating イベントを処理します。 このイベントは、ユーザーがカスタム XML パーツにバインドされているコントロールの内容を変更したときに発生します。 コンテンツ コントロールをカスタム XML パーツにバインドする方法を示すチュートリアルについては、「 チュートリアル: コンテンツ コントロールをカスタム XML パーツにバインドする」を参照してください。

Word プロジェクトのチェック ボックス コンテンツ コントロール

Word 2010 では、チェック ボックスを表す新しい種類のコンテンツ コントロールが導入されました。 ただし、Visual Studio Tools for Office ランタイムでは、Office プロジェクトで使用できる対応する CheckBoxContentControl 型は提供されません。 Word 2013 または Word 2010 プロジェクトでチェック ボックス コンテンツ コントロールを作成するには、 AddContentControl メソッドを使用して ContentControl オブジェクトを作成し、 wdContentControlCheckBox 値をメソッドに渡してチェック ボックス コンテンツ コントロールを指定します。 次のコード例は、これを行う方法を示しています。

this.Paragraphs[1].Range.InsertParagraphBefore();
this.Paragraphs[1].Range.Select();
Microsoft.Office.Tools.Word.ContentControl checkBoxControl1 = 
    this.Controls.AddContentControl("checkBoxControl1", Word.WdContentControlType.wdContentControlCheckBox);

checkBoxControl1.Checked = true;