作業ウィンドウは、通常、Microsoft Office アプリケーションのウィンドウの一方の側にドッキングされるユーザー インターフェイス パネルです。 カスタム作業ウィンドウを使用すると、独自の作業ウィンドウを作成し、ユーザーにソリューションの機能にアクセスするための使い慣れたインターフェイスを提供できます。 たとえば、インターフェイスには、ドキュメントを変更したり、データ ソースからデータを表示したりするためのコードを実行するコントロールを含めることができます。
適用対象: このトピックの情報は、Outlook 用 VSTO アドイン プロジェクトに適用されます。 詳細については、「 Office アプリケーションとプロジェクトの種類で使用できる機能」を参照してください。
注
カスタム作業ウィンドウは、操作ウィンドウとは異なります。 操作ウィンドウは、Microsoft Office Word と Microsoft Office Excel のドキュメント レベルのカスタマイズの一部です。 詳細については、「 操作ウィンドウの概要」を参照してください。
カスタム作業ウィンドウの利点
カスタム作業ウィンドウを使用すると、使い慣れたユーザー インターフェイスに機能を統合できます。 Visual Studio ツールを使用すると、カスタム作業ウィンドウをすばやく作成できます。
使い慣れたユーザー インターフェイス
Microsoft Office システムのアプリケーションのユーザーは、Word の [スタイル] や [書式設定 ] 作業ウィンドウなどの作業ウィンドウの使用に既に慣れている。 カスタム作業ウィンドウは、Microsoft Office システムの他の作業ウィンドウと同様に動作します。 ユーザーは、カスタム作業ウィンドウをアプリケーション ウィンドウのさまざまな側面にドッキングすることも、ウィンドウ内の任意の場所にカスタム作業ウィンドウをドラッグすることもできます。 複数のカスタム作業ウィンドウを同時に表示する VSTO アドインを作成でき、ユーザーは各作業ウィンドウを個別に制御できます。
Windows フォームのサポート
Visual Studio の Office 開発ツールを使用して作成するカスタム作業ウィンドウのユーザー インターフェイスは、Windows フォーム コントロールに基づいています。 使い慣れた Windows フォーム デザイナーを使用して、カスタム作業ウィンドウのユーザー インターフェイスを設計できます。 Windows フォームのデータ バインディング のサポートを使用して、作業ウィンドウのコントロールにデータ ソースをバインドすることもできます。
カスタム作業ウィンドウを作成する
基本的なカスタム作業ウィンドウは、次の 2 つの手順で作成できます。
Windows フォーム コントロールを UserControl オブジェクトに追加して、カスタム作業ウィンドウのユーザー インターフェイスを作成します。
VSTO アドインの CustomTaskPaneCollection オブジェクトにユーザー コントロールを渡して、カスタム作業ウィンドウをインスタンス化します。 このコレクションは、作業ウィンドウの外観を変更し、ユーザー イベントに応答するために使用できる新しい CustomTaskPane オブジェクトを返します。
詳細については、「 方法: カスタム作業ウィンドウをアプリケーションに追加する」を参照してください。
ユーザー インターフェイスを作成する
Visual Studio の Office 開発ツールを使用して作成されたすべてのカスタム作業ウィンドウには、 UserControl オブジェクトが含まれています。 このユーザー コントロールは、カスタム作業ウィンドウのユーザー インターフェイスを提供します。 ユーザー コントロールは、デザイン時または実行時に作成できます。 デザイン時にユーザー コントロールを作成する場合は、Windows フォーム デザイナーを使用して作業ウィンドウのユーザー インターフェイスを作成できます。
カスタム作業ウィンドウをインスタンス化する
カスタム作業ウィンドウのユーザー インターフェイスを含むユーザー コントロールを作成したら、 CustomTaskPaneをインスタンス化する必要があります。 これを行うには、CustomTaskPaneCollection メソッドのいずれかを呼び出して、VSTO アドインのAddにユーザー コントロールを渡します。 このコレクションは、CustomTaskPanes クラスのThisAddIn フィールドとして公開されます。 次のコード例は、 ThisAddIn クラスから実行することを目的としています。
myUserControl1 = new MyUserControl();
myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1, "My Task Pane");
myCustomTaskPane.Visible = true;
Add メソッドは、新しいCustomTaskPane オブジェクトを返します。 このオブジェクトを使用すると、作業ウィンドウの外観を変更したり、ユーザー イベントに応答したりできます。
複数のウィンドウで作業ウィンドウを制御する
カスタム作業ウィンドウは、ユーザーにドキュメントまたはアイテムのビューを表示するドキュメント フレーム ウィンドウに関連付けられます。 作業ウィンドウは、関連付けられたウィンドウが表示されている場合にのみ表示されます。
カスタム作業ウィンドウを表示するウィンドウを決定するには、作業ウィンドウを作成するときに適切な Add メソッドオーバーロードを使用します。
作業ウィンドウをアクティブウィンドウに関連付けるには、 Add メソッドを使用します。
作業ウィンドウを、指定したウィンドウでホストされているドキュメントに関連付けるには、 Add メソッドを使用します。
一部の Office アプリケーションでは、複数のウィンドウが開いているときに作業ウィンドウを作成または表示する場合の明示的な指示が必要です。 これにより、コード内のカスタム作業ウィンドウをインスタンス化する場所を検討して、作業ウィンドウがアプリケーション内の適切なドキュメントまたはアイテムと共に表示されるようにすることが重要になります。 詳細については、「 アプリケーション ウィンドウでのカスタム作業ウィンドウの管理」を参照してください。
作業ウィンドウからアプリケーションにアクセスする
ユーザー コントロールからアプリケーションを自動化する場合は、コード内の Globals.ThisAddIn.Application を使用してオブジェクト モデルに直接アクセスできます。 静的 Globals クラスは、 ThisAddIn オブジェクトへのアクセスを提供します。 このオブジェクトの Application フィールドは、アプリケーションのオブジェクト モデルへのエントリ ポイントです。
Application オブジェクトのThisAddIn フィールドの詳細については、「プログラム VSTO アドイン」を参照してください。カスタム作業ウィンドウからアプリケーションを自動化する方法を示すチュートリアルについては、「チュートリアル: カスタム作業ウィンドウからアプリケーションを自動実行する」を参照してください。
Globals クラスの詳細については、「Office プロジェクトのオブジェクトへのグローバル アクセス」を参照してください。
作業ウィンドウのユーザー インターフェイスを管理する
作業ウィンドウを作成したら、 CustomTaskPane オブジェクトのプロパティとイベントを使用して作業ウィンドウのユーザー インターフェイスを制御し、ユーザーが作業ウィンドウを変更したときに応答できます。
カスタム作業ウィンドウを表示する
既定では、作業ウィンドウは表示されません。 作業ウィンドウを表示するには、 Visible プロパティを true に設定する必要があります。
ユーザーは、作業ウィンドウの隅にある [ 閉じる ] ボタン (X) をクリックすることで、いつでも作業ウィンドウを閉じます。 ただし、ユーザーがカスタム作業ウィンドウをもう一度開く既定の方法はありません。 ユーザーがカスタム作業ウィンドウを閉じると、そのユーザーはカスタム作業ウィンドウを表示する方法を提供しない限り、その作業ウィンドウをもう一度表示できません。
VSTO アドインでカスタム作業ウィンドウを作成する場合は、ユーザーがクリックしてカスタム作業ウィンドウを表示または非表示にできる UI 要素 (ボタンなど) も作成する必要があります。 リボンのカスタマイズをサポートするカスタム作業ウィンドウを Microsoft Office アプリケーションで作成する場合は、カスタム作業ウィンドウを表示または非表示にするボタンを使用して、コントロール グループをリボンに追加できます。 この方法を示すチュートリアルについては、「 チュートリアル: カスタム作業ウィンドウをリボン ボタンと同期する」を参照してください。
リボンのカスタマイズをサポートしていない Microsoft Office アプリケーションでカスタム作業ウィンドウを作成する場合は、カスタム作業ウィンドウを表示または非表示にする CommandBarButton を追加できます。
作業ウィンドウの外観を変更する
CustomTaskPane オブジェクトのプロパティを使用して、カスタム作業ウィンドウのサイズと場所を制御できます。 カスタム作業ウィンドウに含まれる UserControl オブジェクトのプロパティを使用して、カスタム作業ウィンドウの外観に他の多くの変更を加えることができます。 たとえば、ユーザー コントロールの BackgroundImage プロパティを使用して、カスタム作業ウィンドウの背景イメージを指定できます。
次の表に、 CustomTaskPane プロパティを使用してカスタム作業ウィンドウに加えることができる変更を示します。
| Task | プロパティ |
|---|---|
| 作業ウィンドウのサイズを変更するには | Height Width |
| 作業ウィンドウの場所を変更するには | DockPosition |
| 作業ウィンドウを表示・非表示にするには | Visible |
| ユーザーが作業ウィンドウの場所を変更できないようにするには | DockPositionRestrict |
カスタム作業ウィンドウ イベントをプログラムする
ユーザーがカスタム作業ウィンドウを変更したときに VSTO アドインが応答するようにしたい場合があります。 たとえば、ユーザーがウィンドウの向きを垂直方向から水平方向に変更する場合は、コントロールの位置を変更できます。
次の表に、ユーザーがカスタム作業ウィンドウに加えた変更に対応するために処理できるイベントを示します。
| Task | Event |
|---|---|
| ユーザーが作業ウィンドウの場所を変更したときに応答します。 | DockPositionChanged |
| ユーザーが作業ウィンドウを非表示にしたとき、または作業ウィンドウを表示したときに応答します。 | VisibleChanged |
作業ウィンドウで使用されるリソースをクリーンアップする
カスタム作業ウィンドウを作成した後、VSTO アドインが実行されている限り、 CustomTaskPane オブジェクトはメモリ内に残ります。 ユーザーが作業ウィンドウの隅にある [閉じる ] ボタン (X) をクリックしても、オブジェクトはメモリ内に残ります。
VSTO アドインの実行中に作業ウィンドウで使用されるリソースをクリーンアップするには、 Remove または RemoveAt メソッドを使用します。 これらのメソッドは、指定した CustomTaskPane オブジェクトを CustomTaskPanes コレクションから削除し、オブジェクトの Dispose メソッドを呼び出します。
Visual Studio Tools for Office ランタイムは、VSTO アドインがアンロードされたときに、カスタム作業ウィンドウで使用されるリソースを自動的にクリーンアップします。 プロジェクトのRemove イベント ハンドラーでRemoveAtまたはThisAddIn_Shutdownメソッドを呼び出さないでください。 これらのメソッドはObjectDisposedExceptionをスローします。というのも、Visual Studio Tools for Office ランタイムは、ThisAddIn_Shutdownが呼び出される前にCustomTaskPaneオブジェクトによって使用されたリソースをクリーンアップするからです。
ThisAddIn_Shutdownの詳細については、「Office プロジェクトのイベント」を参照してください。
複数のアプリケーション ウィンドウでカスタム作業ウィンドウを管理する
複数のウィンドウを使用してドキュメントやその他のアイテムを表示するカスタム作業ウィンドウをアプリケーションで作成する場合は、ユーザーが作業ウィンドウを予期したときに作業ウィンドウが確実に表示されるように、追加の手順を実行する必要があります。
すべてのアプリケーションのカスタム作業ウィンドウは、ユーザーにドキュメントまたはアイテムのビューを表示するドキュメント フレーム ウィンドウに関連付けられます。 作業ウィンドウは、関連付けられたウィンドウが表示されている場合にのみ表示されます。 ただし、すべてのアプリケーションでドキュメント フレーム ウィンドウが同じように使用されるわけではありません。
次のアプリケーション グループには、異なる開発要件があります。
前途
Outlook 用のカスタム作業ウィンドウを作成すると、カスタム作業ウィンドウは特定のエクスプローラーまたはインスペクター ウィンドウに関連付けられます。 エクスプローラーはフォルダーの内容を表示するウィンドウで、インスペクターはメール メッセージやタスクなどのアイテムを表示するウィンドウです。
複数のエクスプローラーウィンドウまたはインスペクターウィンドウでカスタム作業ウィンドウを表示する場合は、エクスプローラーまたはインスペクターウィンドウが開いたときにカスタム作業ウィンドウの新しいインスタンスを作成する必要があります。 これを行うには、エクスプローラーまたはインスペクター ウィンドウの作成時に発生するイベントを処理し、イベント ハンドラーで作業ウィンドウを作成します。 エクスプローラーとインスペクターのイベントを処理して、表示されているウィンドウに応じて作業ウィンドウを非表示または表示することもできます。
作業ウィンドウを特定のエクスプローラーまたはインスペクターに関連付けるには、 Add メソッドを使用して作業ウィンドウを作成し、 Explorer または Inspector オブジェクトを ウィンドウ パラメーターに渡します。 カスタム作業ウィンドウの作成の詳細については、「 カスタム作業ウィンドウの概要」を参照してください。
-
インスペクター ウィンドウの状態を監視するには、次のインスペクター関連のイベントを処理できます。
Outlook でカスタム作業ウィンドウの複数のインスタンスを禁止する
Outlook ウィンドウにカスタム作業ウィンドウの複数のインスタンスが表示されないようにするには、各ウィンドウを閉じるときに、CustomTaskPanes クラスのThisAddIn コレクションからカスタム作業ウィンドウを明示的に削除します。
RemoveやCloseなど、ウィンドウが閉じられたときに発生するイベントで、Close メソッドを呼び出します。
カスタム作業ウィンドウを明示的に削除しない場合、Outlook ウィンドウにカスタム作業ウィンドウの複数のインスタンスが表示されることがあります。 Outlook ではウィンドウがリサイクルされることがあり、再利用されたウィンドウには、そのウィンドウにアタッチされたカスタム作業ウィンドウへの参照が保持されます。
Word、InfoPath、およびPowerPoint
Word、InfoPath、PowerPointでは、各ドキュメントが異なるドキュメント フレーム ウィンドウに表示されます。 これらのアプリケーションのカスタム作業ウィンドウを作成すると、カスタム作業ウィンドウは特定のドキュメントにのみ関連付けられます。 ユーザーが別のドキュメントを開いた場合、前のドキュメントが再び表示されるまで、カスタム作業ウィンドウは非表示になります。
複数のドキュメントを含むカスタム作業ウィンドウを表示する場合は、ユーザーが新しいドキュメントを作成するか、既存のドキュメントを開いたときに、カスタム作業ウィンドウの新しいインスタンスを作成します。 これを行うには、ドキュメントの作成時または開くときに発生するイベントを処理し、イベント ハンドラーで作業ウィンドウを作成します。 また、表示するドキュメントに応じて、ドキュメント イベントを処理して作業ウィンドウを非表示または表示することもできます。
作業ウィンドウを特定のドキュメント ウィンドウに関連付けるには、Add メソッドを使用して作業ウィンドウを作成し、WindowWindowObject (Word の場合)、 (InfoPath の場合)、または DocumentWindow (PowerPoint) を渡します。
Word イベント
Word でドキュメント ウィンドウの状態を監視するには、次のイベントを処理できます。
InfoPath イベント
InfoPath でドキュメント ウィンドウの状態を監視するには、次のイベントを処理します。
PowerPoint イベント
PowerPointでドキュメント ウィンドウの状態を監視するには、次のイベントを処理できます。
Microsoft.Office.Interop.PowerPoint.EApplication_Event.AfterNewPresentation
Microsoft.Office.Interop.PowerPoint.EApplication_Event.AfterPresentationOpen
Microsoft.Office.Interop.PowerPoint.EApplication_Event.NewPresentation
Microsoft.Office.Interop.PowerPoint.EApplication_Event.PresentationOpen
Microsoft.Office.Interop.PowerPoint.EApplication_Event.WindowActivate
Microsoft.Office.Interop.PowerPoint.EApplication_Event.WindowDeactivate