ホスト項目とホスト コントロールの概要
ホスト項目およびホスト コントロールは、Visual Studio の Office 開発ツールを使用して作成された Office ソリューションのプログラミング モデルを提供する型です。ホスト項目とホスト コントロールは、Microsoft Office Word および Microsoft Office Excel の COM ベースのオブジェクト モデルとの対話を、Windows フォーム コントロールなどのマネージ オブジェクトとの対話と似たものにします。
対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
ホスト項目
ホスト項目は、Office プロジェクトでオブジェクト モデルの階層構造の最上位にある型です。Visual Studio Tools for Office Runtime は、Word ソリューションおよび Excel ソリューションに対して次のホスト項目を定義します。
これらの型は、WordまたはExcelのオブジェクト モデルにネイティブに存在する ネイティブOfficeオブジェクトと呼ばれるオブジェクトを拡張します。たとえば、Microsoft.Office.Tools.Word.Document ホスト項目は、Word プライマリ相互運用機能アセンブリに定義されている Microsoft.Office.Interop.Word.Document オブジェクトを拡張します。
ホスト項目は、一般に、対応する Office オブジェクトと同じ基本機能を備えていますが、さらに次の機能を備えています。
ホスト コントロールや Windows フォーム コントロールなどのマネージ コントロールをホストする機能。
豊富なイベント モデル。ネイティブな Word および Excel オブジェクト モデルにおける一部の文書、ブック、ワークシートのイベントは、アプリケーション レベルでのみ発生します。ホスト項目では、個別のドキュメントのイベントが扱いやすくなるように、これらのイベントがドキュメント レベルで発生します。
ドキュメント レベルのプロジェクトのホスト項目について
ドキュメント レベルのプロジェクトでは、ホスト項目はコードのエントリ ポイントを提供し、ソリューションの開発に役立つデザイナーを備えています。
Microsoft.Office.Tools.Word.Document と Microsoft.Office.Tools.Excel.Worksheet のホスト項目は、Windows フォーム デザイナーに似た、文書やワークシートを視覚的に表現する関連デザイナーを備えています。このデザイナーを使用して、Word や Excel で文書やワークシートのコンテンツを直接変更したり、デザイン サーフェイスにコントロールをドラッグしたりすることができます。詳細については、「Document ホスト項目」および「Worksheet ホスト項目」を参照してください。
Microsoft.Office.Tools.Excel.Workbook ホスト項目は、ユーザー インターフェイスのあるコントロールのコンテナーとしては動作しません。代わりに、このホスト項目のデザイナーはコンポーネント トレイとして機能し、ユーザーはこのデザイナーを使用して DataSet などのコンポーネントをデザイン サーフェイスにドラッグできます。詳細については、「Workbook ホスト項目」を参照してください。
ドキュメント レベルのプロジェクトでは、ホスト項目をプログラムで作成することはできません。その代わり、デザイン時に Visual Studio によってプロジェクトに自動的に生成される ThisDocument、ThisWorkbook、または Sheetn クラスを使用します。生成されるこれらのクラスは、ホスト項目から派生するもので、コードのエントリ ポイントを提供します。詳細については、「ホスト項目およびホスト コントロールのプログラム上の制限事項」を参照してください。
アプリケーション レベルのプロジェクトのホスト項目について
アプリケーション レベルのアドインを作成するとき、既定では、ホスト項目にはアクセスできません。ただし、Word および Excel のアドインでは、実行時に Microsoft.Office.Tools.Word.Document、Microsoft.Office.Tools.Excel.Workbook、および Microsoft.Office.Tools.Excel.Worksheet ホスト項目を生成できます。
ホスト項目を生成すると、文書にコントロールを追加するなどのタスクを実行できます。詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。
ホスト コントロール
ホスト コントロールは、Word や Excel のオブジェクト モデルでさまざまなユーザー インターフェイス (UI: User Interface) オブジェクトを拡張します。たとえば、Microsoft.Office.Interop.Word.ContentControl オブジェクトや Microsoft.Office.Interop.Excel.Range オブジェクトが挙げられます。
Excel プロジェクトで使用できるホスト コントロールを次に示します。
Word プロジェクトで使用できるホスト コントロールを次に示します。
Office ドキュメントに追加されたホスト コントロールは、ネイティブな Office オブジェクトのように動作しますが、ホスト コントロールには、イベントやデータ バインディング機能を含む追加の機能があります。たとえば、Excel 内のネイティブな Microsoft.Office.Interop.Excel.Range オブジェクトのイベントをキャプチャするには、最初にワークシートの変更イベントを処理する必要があります。次に、変更が Microsoft.Office.Interop.Excel.Range 内で発生したかどうかを判断する必要があります。一方、Microsoft.Office.Tools.Excel.NamedRange ホスト コントロールには、直接処理できる Change イベントがあります。
ホスト項目とホスト コントロールの関係は、Windows フォームと Windows フォーム コントロールの関係によく似ています。Windows フォームにテキスト ボックス コントロールを配置するのと同じように、Microsoft.Office.Tools.Excel.Worksheet ホスト項目に Microsoft.Office.Tools.Excel.NamedRange コントロールを配置します。次の図は、ホスト項目とホスト コントロールの関係を示しています。
また、Windows フォーム コントロールを Word および Excel の文書領域に直接追加することによって、Office ソリューションで Windows フォーム コントロールを使用できます。詳細については、「Office ドキュメントでの Windows フォーム コントロールの概要」を参照してください。
[!メモ]
Word サブ文書へのホスト コントロールおよび Windows フォーム コントロールの追加はサポートされていません。
文書へのホスト コントロールの追加
ドキュメント レベルのプロジェクトでは、次の方法を使用して、デザイン時に Word 文書や Excel ワークシートにホスト コントロールを追加できます。
ホスト コントロールを、デザイン時に、ネイティブ オブジェクトを追加する場合と同じ方法でドキュメントに追加します。
ツールボックスからホスト コントロールを文書やワークシートにドラッグします。Excel のホスト コントロールは Excel プロジェクトの [Excel コントロール] タブにあり、Word のホスト コントロールは、Word プロジェクトの [Word コントロール] タブにあります。
[データ ソース] ウィンドウから文書やワークシートに、ホスト コントロールをドラッグします。これによって、既にデータにバインドされているコントロールを追加できます。詳細については、「Office ソリューションでのコントロールへのデータのバインド」を参照してください。
ドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトでは、実行時にドキュメントに対して一部のホスト コントロールを追加できるようになりました。詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。
ホスト コントロールをドキュメントに追加する方法の詳細については、以下のトピックを参照してください。
ホスト コントロールの名前付け
ツールボックスから文書にホスト コントロールをドラッグすると、コントロールには自動的にコントロールの型と末尾の増分番号で構成される名前が付けられます。たとえば、ブックマークには bookmark1 や bookmark2 などの名前が付けられます。Word または Excel のネイティブ機能を使用してコントロールを追加する場合は、コントロールの作成時に特定の名前を指定できます。[プロパティ] ウィンドウで、[名前] プロパティの値を変更してコントロールの名前を変更することもできます。
[!メモ]
ホスト コントロールの名前に予約語は使用できません。たとえば、NamedRange コントロールをワークシートに追加し、名前を "System" に変更すると、プロジェクトをビルドするときにエラーが発生します。
ホスト コントロールの削除
ドキュメント レベルのプロジェクトでは、デザイン時にExcelワークシートまたはWord文書のコントロールを選択し、Delキーを押してホスト コントロールを削除できます。ただし、NamedRange コントロールを削除するには、Excel の [名前の定義] ダイアログ ボックスを使用する必要があります。
デザイン時に文書にホスト コントロールを追加した場合は、それを実行時にプログラムで削除しないでください。次にコード内でコントロールを使用すると、例外がスローされます。ホスト コントロールの Delete メソッドは、実行時に文書に追加されたホスト コントロールのみを削除します。デザイン時に作成されたホスト コントロールの Delete メソッドを呼び出すと、例外がスローされます。
たとえば、NamedRange の Delete メソッドは、NamedRange がプログラムによってワークシートに追加された場合のみ (動的に作成されたホスト コントロールと呼ばれます)、これを正しく削除します。動的に作成されたホスト コントロールは、コントロール名を Worksheet.Controls プロパティまたは Document.Controls プロパティの Remove メソッドに渡すことによっても削除できます。詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。
エンド ユーザーが実行時にドキュメントからホスト コントロールを削除すると、ソリューションは予想外の形で失敗することがあります。Word および Excel のドキュメント保護機能を使用して、ホスト コントロールが削除されないように保護できます。詳細については、「Office 開発のサンプルとチュートリアル」を参照してください。
[!メモ]
文書やワークシートの Shutdown イベント ハンドラーでは、コントロールをプログラムで削除しないでください。Shutdown イベントが発生すると、UI 要素は使用できなくなります。アプリケーションが終了する前にコントロールを削除する場合は、BeforeClose や BeforeSave などの別のイベント ハンドラーにコードを追加してください。
ホスト コントロール イベントのプログラミング
ホスト コントロールは Office オブジェクトを拡張したものですが、その 1 つがイベントの追加です。たとえば、Excel の Microsoft.Office.Interop.Excel.Range オブジェクトと Word の Microsoft.Office.Interop.Word.Bookmark オブジェクトはイベントを持ちませんが、Visual Studio Tools for Office Runtime では、プログラミング可能なイベントを追加することによってこれらのオブジェクトを拡張しています。Windows フォームのコントロールのイベントにアクセスするのと同じ方法で、これらのイベントにアクセスし、コーディングすることができます。Visual Basic の場合はイベント ドロップダウン リストを使用し、C# の場合はイベント プロパティ ページを使用します。詳細については、「チュートリアル : NamedRange コントロールのイベントのプログラミング」を参照してください。
[!メモ]
Excel の Application オブジェクトの EnableEvents プロパティを false に設定しないでください。false に設定すると、Excel でイベント (ホスト コントロールのイベントなど) が生成されなくなります。
参照
概念
ホスト項目およびホスト コントロールのプログラム上の制限事項