更新 :
2008 年 7 月
対象
|
|---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。
ドキュメント レベルのプロジェクト
Excel 2003
Excel 2007
Word 2003
Word 2007
アプリケーション レベルのプロジェクト
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。
|
Microsoft Office Word 文書および Microsoft Office Excel ブックでは、実行時にコントロールを追加するだけでなく、削除することもできます。実行時にドキュメントに追加するコントロールをダイナミック コントロールといいます。Visual Studio 2008 Service Pack 1 (SP1) より、アプリケーション レベルのアドインを使用して、ダイナミック コントロールを文書およびブックに追加できるようになりました。
ここでは、次の情報について説明します。
コントロール コレクションによる実行時のコントロールの管理
実行時にコントロールを追加、取得、または削除するには、Microsoft.Office.Tools.Excel..::.ControlCollection クラスおよび Microsoft.Office.Tools.Word..::.ControlCollection クラスのヘルパー メソッドを使用します。
コントロール コレクションにアクセスする方法は、開発しているプロジェクトの種類によって異なります。
コントロールの追加
コントロールのアクセスおよび削除
ホスト コントロールをプログラムでドキュメントに追加する場合は、そのコントロールを一意に識別する名前を渡し、コントロールを追加するドキュメント上の位置を指定する必要があります。詳細については、次に示すトピックを参照してください。
ホスト コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
ドキュメントを保存して閉じると、動的に作成されたホスト コントロールはすべてイベントから切断され、データ バインディング機能を失います。コードをソリューションに追加して、ドキュメントが再び開かれたときにホスト コントロールを再作成することができます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。
ドキュメントへの Windows フォーム コントロールの追加
Windows フォーム コントロールをプログラムでドキュメントに追加する場合は、そのコントロールの位置とコントロールを一意に識別する名前を渡す必要があります。Visual Studio Tools for Office には、各コントロールに対応するヘルパー メソッドが用意されています。それらのメソッドはオーバーロードされるので、コントロールの位置を範囲または特定の座標で渡すことができます。詳細な手順については、「方法 : Office ドキュメントに Windows フォーム コントロールを追加する」を参照してください。
ドキュメントを保存して閉じるとき、動的に作成された Windows フォーム コントロールはドキュメントから削除されます。コードをソリューションに追加して、ドキュメントが再び開かれたときにコントロールを再作成することができます。アプリケーション レベルのアドインを使用してダイナミック Windows フォーム コントロールを作成する場合、コントロールの ActiveX ラッパーはドキュメント内に保持されます。詳細については、「Office ドキュメントでのダイナミック コントロールの永続化」を参照してください。
メモ : |
|---|
Windows フォーム コントロールは、保護されているドキュメントにはプログラムで追加できません。コントロールを追加するために、Word 文書または Excel ワークシートの保護をプログラムで解除する場合は、ドキュメントを閉じるときにコントロールの ActiveX ラッパーを削除するコードを追加で記述する必要があります。コントロールの ActiveX ラッパーは、保護されているドキュメントから自動的には削除されません。 |
カスタム コントロールの追加
使用できるヘルパー メソッド (たとえばカスタム ユーザー コントロール) でサポートされない System.Windows.Forms..::.Control を追加するには、次のメソッドを使用します。
コントロールを追加するには、System.Windows.Forms..::.Control、コントロールの位置、およびコントロールを一意に識別する名前を AddControl メソッドに渡します。Excel では、このメソッドは OLEObject を返します。Word では、このメソッドは OLEControl を返します。これらのオブジェクトは、コントロールがワークシートまたは文書とどのように対話するかを定義します。
AddControl(Control, Range, String) メソッドを使用して、カスタム ユーザー コントロールをワークシートに動的に追加するコード例を次に示します。この例では、UserControl1 という名前のユーザー コントロール、および range1 という名前の Range コントロールを使用します。この例は、Excel のドキュメント レベルのプロジェクトのいずれかの Sheetn クラスから実行することを前提としています。
Dim customControl As New UserControl1()
Dim dynamicControl As Microsoft.Office.Tools.Excel.OLEObject = _
Me.Controls.AddControl(customControl, range1, "dynamic")
UserControl1 customControl = new UserControl1();
Microsoft.Office.Tools.Excel.OLEObject dynamicControl =
this.Controls.AddControl(customControl, range1, "dynamic");
カスタム コントロールのメンバの使用
AddControl メソッドの 1 つを使用してコントロールをワークシートまたは文書に追加すると、2 つの異なるコントロール オブジェクトが存在するようになります。
これらのコントロールの間で、多くのプロパティおよびメソッドが共有されます。これらのメソッドとプロパティには、適切なコントロールからアクセスする必要があります。
System.Windows.Forms..::.Control から共有のメソッドやプロパティにアクセスした場合は、警告や通知なしにアクセスが失敗します。無効な結果が生成される場合もあります。OLEObject または OLEControl のメソッドまたはプロパティを常に使用し、必要なメソッドやプロパティが使用できない場合にのみ System.Windows.Forms..::.Control を参照してください。
たとえば、OLEObject クラスと System.Windows.Forms..::.Control クラスの両方に Top プロパティがあります。コントロールの上端とテキストの上端の間の距離を取得または設定するには、System.Windows.Forms..::.Control の Top プロパティではなく、OLEObject の Top プロパティを使用します。
' Property is set in relation to the document.
dynamicControl.Top = 100
' Property is set in relation to the container control.
customControl.Top = 100
// Property is set in relation to the document.
dynamicControl.Top = 100;
// Property is set in relation to the container control.
customControl.Top = 100;
処理手順
概念
参照
その他の技術情報
日付
|
履歴
|
理由
|
|---|
2008 年 7 月 |
アプリケーション レベルのアドインを使用したドキュメントへのコントロールの追加に関する情報を追加
| SP1 機能変更 |