チュートリアル: コンテンツ コントロールを使用してテンプレートを作成する
このチュートリアルでは、コンテンツ コントロールを使用して、Microsoft Office Word テンプレートで構造化された再利用可能なコンテンツを作成するための、ドキュメント レベルのカスタマイズを作成する方法について説明します。
適用対象: このトピックの情報は、Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
Word では「文書パーツ」という名前の、再利用可能な文書パーツのコレクションを作成することができます。 このチュートリアルでは、文書パーツとして 2 つの表を作成する方法を説明します。 各表には、プレーン テキストや日付などさまざまな種類のコンテンツを保持できる、複数のコンテンツ コントロールが含まれます。 表の 1 つには従業員に関する情報が含まれ、もう一方の表には顧客からのフィードバックが含まれています。
テンプレートからドキュメントを作成した後に、複数の BuildingBlockGalleryContentControl オブジェクトを使用して、いずれかの表をドキュメントに追加できます。これらのオブジェクトには、テンプレート内で使用できる文書パーツが表示されます。
このチュートリアルでは、次の作業について説明します。
デザイン時に Word テンプレートで、コンテンツ コントロールが含まれる表を作成する。
プログラムを使用して、コンボ ボックス コンテンツ コントロールおよびドロップダウン リスト コンテンツ コントロールのデータを読み込む。
特定の表を保護してユーザーが編集できないようにする。
表をテンプレートの文書パーツ コレクションに追加する。
テンプレートで使用可能な文書パーツを表示するコンテンツ コントロールを作成する。
Note
次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
Microsoft Office Developer Tools が含まれている Visual Studio のエディション。 詳細については、「Office ソリューションを開発できるようにコンピューターを構成する」を参照してください。
Microsoft Word
新しい Word テンプレート プロジェクトを作成する
ユーザーが独自のコピーを簡単に作成できるように、Word テンプレートを作成します。
新しい Word テンプレート プロジェクトを作成するには
MyBuildingBlockTemplate という名前の Word テンプレート プロジェクトを作成します。 ウィザードで、ソリューション内に新しいドキュメントを作成します。 詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Visual Studio によって、新しい Word テンプレートがデザイナーで開かれ、MyBuildingBlockTemplate プロジェクトがソリューション エクスプローラーに追加されます。
従業員表を作成する
ユーザーが従業員に関する情報を入力できる 4 種類のコンテンツ コントロールが含まれる表を作成します。
従業員表を作成するには
Visual Studio デザイナーでホストされている Word テンプレートのリボンで [挿入] タブをクリックします。
[表] グループの [表] をクリックし、2 列 4 行の表を挿入します。
最初の列に次のようにテキストを入力します。
従業員名 採用日 Title 写真 2 番目の列の最初のセル ([Employee Name] の横) をクリックします。
リボンの [開発] タブをクリックします。
Note
[開発] タブが表示されていない場合は、最初にこれを表示する必要があります。 詳しくは、「方法: [開発] タブをリボンに表示する」をご覧ください。
[コントロール] グループで、[テキスト] ボタンをクリックして、最初のセルに a PlainTextContentControl を追加します。
2 番目の列の 2 番目のセル ([Hire Date] の横) をクリックします。
[コントロール] グループで、[日付の選択] ボタンをクリックして、2 番目のセルに a DatePickerContentControl を追加します。
2 番目の列の 3 番目のセル ([タイトル] の横) をクリックします。
[コントロール] グループで、[コンボ ボックス] ボタンをクリックして、3 番目のセルに a ComboBoxContentControl を追加します。
2 番目の列の最後のセル ([写真] の横) をクリックします。
[コントロール] グループで、[図コンテンツ コントロール] ボタンをクリックして、最後のセルに a PictureContentControl を追加します。
顧客フィードバック表を作成する
ユーザーが顧客のフィードバック情報を入力できる 3 種類のコンテンツ コントロールが含まれる表を作成します。
顧客フィードバック表を作成するには
Word テンプレートで、前の手順で追加した従業員表の次の行をクリックし、Enter キーを押して新しい段落を追加ます。
リボンの [挿入] タブをクリックします。
[表] グループの [表] をクリックし、2 列 3 行の表を挿入します。
最初の列に次のようにテキストを入力します。
顧客名 満足度評価 コメント 2 番目の列の最初のセル ([Customer Name] の横) をクリックします。
リボンの [開発] タブをクリックします。
[コントロール] グループで、[テキスト] ボタンをクリックして、最初のセルに a PlainTextContentControl を追加します。
2 番目の列の 2 番目のセル ([満足度評価] の横) をクリックします。
[コントロール] グループで、[ドロップダウン リスト] ボタンをクリックして、2 番目のセルに a DropDownListContentControl を追加します。
2 番目の列の最後のセル ([コメント] の横) をクリックします。
[コントロール] グループで、[リッチ テキスト] ボタンをクリックして、最後のセルに a RichTextContentControl を追加します。
コンボ ボックスとドロップダウン リストのデータをプログラムによって設定する
デザイン時にコンテンツ コントロールを初期化するには、Visual Studio の [プロパティ] ウィンドウを使用します。 また、実行時に初期化することもできます。これにより、初期状態を動的に設定できます。 このチュートリアルでは、ComboBoxContentControl および DropDownListContentControl 内のエントリのデータをコードを使って実行時に設定し、これらのオブジェクトの動作を確認します。
コンテンツ コントロールの UI をプログラムで変更するには
ソリューション エクスプローラーで ThisDocument.cs または ThisDocument.vb を右クリックしてから、[コードの表示] をクリックします。
ThisDocument
クラスに次のコードを追加します。 このコードは、このチュートリアルの後半で使用するいくつかのオブジェクトを宣言します。ThisDocument
クラスのThisDocument_Startup
メソッドに次のコードを追加します。 このコードは表の ComboBoxContentControl と DropDownListContentControl にエントリを追加し、ユーザーがコンテンツ コントロールを編集する前に、各コントロールに表示されるプレースホルダー テキストを設定します。comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own"; comboBoxContentControl1.DropDownListEntries.Add("Engineer", "Engineer", 0); comboBoxContentControl1.DropDownListEntries.Add("Designer", "Designer", 1); comboBoxContentControl1.DropDownListEntries.Add("Manager", "Manager", 2); dropDownListContentControl1.PlaceholderText = "Choose a rating (1 lowest, 3 highest)"; dropDownListContentControl1.DropDownListEntries.Add("1", "1", 0); dropDownListContentControl1.DropDownListEntries.Add("2", "2", 1); dropDownListContentControl1.DropDownListEntries.Add("3", "3", 2);
従業員表を保護してユーザーが編集できないようにする
先ほど宣言した GroupContentControl オブジェクトを使用して、従業員表を保護します。 表を保護した後でも、ユーザーは表内のコンテンツ コントロールを編集できます。 ただし、最初の列のテキストを編集したり、他の方法で表を変更すること (行や列を追加/削除するなど) はできません。 GroupContentControl を使用してドキュメントの一部を保護する方法について詳しくは、「コンテンツ コントロール」をご覧ください。
従業員表を保護してユーザーが編集できないようにするには
ThisDocument
クラスのThisDocument_Startup
メソッドに (前の手順で追加したコードの後ろに) 次のコードを追加します。 このコードにより、先ほど宣言した GroupContentControl オブジェクト内に表を配置することで、ユーザーが従業員表を編集できないようにします。
表を文書パーツ コレクションに追加する
作成した表をユーザーがドキュメントに挿入できるように、テンプレート内の文書パーツ コレクションに表を追加します。 ドキュメントの文書パーツについて詳しくは、「コンテンツ コントロール」をご覧ください。
テンプレートの文書パーツに表を追加するには
ThisDocument
クラスのThisDocument_Startup
メソッドに (前の手順で追加したコードの後ろに) 次のコードを追加します。 このコードにより、表が含まれる新しい文書パーツが Microsoft.Office.Interop.Word.BuildingBlockEntries コレクションに追加されます。このコレクションにはテンプレート内のすべての再利用可能な文書パーツが含まれています。 新しい文書パーツは「Employee and Customer Information」という新しいカテゴリーに定義され、文書パーツの種類Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1
が割り当てられます。Word.Template template1 = this.AttachedTemplate as Word.Template; if (template1 != null) { object description = null; template1.BuildingBlockEntries.Add("Employee Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[1].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); template1.BuildingBlockEntries.Add("Customer Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[2].Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent); }
ThisDocument
クラスのThisDocument_Startup
メソッドに (前の手順で追加したコードの後ろに) 次のコードを追加します。 このコードは、テンプレートから、表を削除します。 表は、テンプレートの再利用可能な文書パーツのギャラリーに追加されたため、もう必要ありません。 コードは最初にドキュメントをデザイン モードにして、保護されている従業員表を削除できるようにします。
文書パーツを表示するコンテンツ コントロールを作成する
先ほど作成した文書パーツ (表) へのアクセスを提供するコンテンツ コントロールを作成します。 ユーザーはこのコントロールをクリックして、ドキュメントに表を追加できます。
文書パーツを表示するコンテンツ コントロールを作成するには
ThisDocument
クラスのThisDocument_Startup
メソッドに (前の手順で追加したコードの後ろに) 次のコードを追加します。 このコードは先ほど宣言した BuildingBlockGalleryContentControl オブジェクトを初期化します。 BuildingBlockGalleryContentControl は「Employee and Customer Information」というカテゴリーに定義されていて、文書パーツの種類Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1
のすべての文書パーツを表示します。buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[1].Range, "buildingBlockControl1"); buildingBlockControl1.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl1.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl1.PlaceholderText = "Choose your first building block"; buildingBlockControl2 = this.Controls.AddBuildingBlockGalleryContentControl( this.Paragraphs[2].Range, "buildingBlockControl2"); buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information"; buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl2.PlaceholderText = "Choose your second building block";
プロジェクトをテストする
ユーザーはドキュメント内の文書パーツ ギャラリー コントロールをクリックして、従業員表や顧客フィードバック表を挿入できます。 ユーザーは、両方の表内のコンテンツ コントロールで、応答を入力または選択できます。 ユーザーは顧客フィードバック表の他の部分を変更できますが、従業員表の他の部分を変更できてはなりません。
従業員表をテストするには
F5 キーを押してプロジェクトを実行します。
[最初の文書パーツを選択する] をクリックして、最初の文書パーツ ギャラリーのコンテンツ コントロールを表示します。
コントロールの [カスタム ギャラリー 1] 見出しの横のドロップダウン矢印をクリックして、[Employee Table] を選択します。
「Employee Name」セルの右側のセルをクリックし、名前を入力します。
このセルにテキストのみを追加できることを確認します。 PlainTextContentControl により、ユーザーはテキストのみを追加でき、アートや表など他の種類のコンテンツは追加できません。
Hire Date セルの右側のセルをクリックし、日付の選択で日付を選択します。
Title セルの右側にあるセルをクリックし、コンボ ボックスで役職名のいずれかを選択します。
必要に応じて、リストに含まれていない役職名を入力します。 ComboBoxContentControl ではユーザーがエントリの一覧から選択することも、独自のエントリを入力することもできるため、このようなケースが生じることがあります。
写真セルの右側にあるセルでアイコンをクリックし、表示する画像を参照します。
表に行や列を追加できるか、また、表から行や列を削除できるか、試してみます。 表を変更できないことを確認します。 GroupContentControl により、表は変更できないようになっています。
顧客フィードバック表をテストするには
[2 番目の文書パーツを選択する] をクリックして、2 番目の文書パーツ ギャラリー コンテンツ コントロールを表示します。
コントロールの [カスタム ギャラリー 1] 見出しの横のドロップダウン矢印をクリックして、[Customer Table] を選択します。
「顧客名」セルの右側のセルをクリックし、名前を入力します。
「満足度評価」セルの右側にあるセルをクリックし、使用可能なオプションのいずれかを選択します。
独自のエントリを入力できないことを確認します。 DropDownListContentControl では、ユーザーはエントリの一覧から選択することのみが可能です。
コメント セルの右側のセルをクリックし、いくつかのコメントを入力します。
必要に応じて、アートや、埋め込み表など、テキスト以外のコンテンツを追加します。 RichTextContentControl ではユーザーがテキスト以外のコンテンツを追加できるため、このようなケースが生じることがあります。
表に行や列を追加できること、また、表から行や列を削除できることを確認します。 表を GroupContentControl に配置して保護していないため、表への変更が可能です。
テンプレートを閉じます。
次のステップ
コンテンツ コントロールの使用方法の詳細については、次の各トピックを参照してください。
- コンテンツ コントロールを、文書に埋め込まれている XML の一部 (「カスタム XML 部分」とも呼ばれます) にバインドします。 詳しくは、「チュートリアル: カスタム XML 部分へのコンテンツ コントロールのバインド」をご覧ください。