Share via


複数のアプリケーション ウィンドウでカスタム作業ウィンドウを管理する

更新 : 2007 年 11 月

対象

このトピックの情報は、ここに示す Visual Studio Tools for Office プロジェクトおよび Microsoft Office アプリケーションにのみ適用されます。

プロジェクトの種類

  • アプリケーション レベルのプロジェクト

Microsoft Office アプリケーション

  • Excel 2007

  • InfoPath 2007

  • Outlook 2007

  • PowerPoint 2007

  • Word 2007

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

ドキュメントやその他の項目を表示するために複数のウィンドウを使用するアプリケーションでカスタム作業ウィンドウを作成するときは、ユーザーが求めるときに作業ウィンドウが表示されるように、追加の手順を実行する必要があります。

すべてのアプリケーションにおいて、カスタム作業ウィンドウはドキュメント フレーム ウィンドウに関連付けられます。ドキュメント フレーム ウィンドウは、ユーザーに対してドキュメントや項目を表示するウィンドウです。作業ウィンドウが表示されるのは、関連付けられたウィンドウが表示される場合だけです。ただし、すべてのアプリケーションがドキュメント フレーム ウィンドウを同じように使用するわけではありません。

次に挙げるアプリケーション グループは、それぞれ異なる開発要件を前提とします。

  • Outlook

  • Word と InfoPath

  • Excel と PowerPoint

Outlook

Outlook にカスタム作業ウィンドウを作成すると、カスタム作業ウィンドウは特定のエクスプローラ ウィンドウまたはインスペクタ ウィンドウに関連付けられます。エクスプローラは、フォルダの内容を表示するウィンドウです。インスペクタは、電子メール メッセージやタスクなどの項目を表示するウィンドウです。

複数のエクスプローラ ウィンドウまたはインスペクタ ウィンドウにカスタム作業ウィンドウを表示する場合は、エクスプローラ ウィンドウまたはインスペクタ ウィンドウを開くときにカスタム作業ウィンドウの新しいインスタンスを作成する必要があります。この操作を行うには、エクスプローラ ウィンドウまたはインスペクタ ウィンドウが作成されるときに発生するイベントを処理し、イベント ハンドラで作業ウィンドウを作成します。エクスプローラ イベントとインスペクタ イベントを処理し、表示するウィンドウに応じて、作業ウィンドウの表示/非表示を切り替えることもできます。

作業ウィンドウを特定のエクスプローラ ウィンドウまたはインスペクタ ウィンドウに関連付けるには、CustomTaskPaneCollection.Add(UserControl, String, Object) メソッドを使用して作業ウィンドウを作成するか、Explorer オブジェクトまたは Inspector オブジェクトを window パラメータに渡します。カスタム作業ウィンドウの作成の詳細については、「カスタム作業ウィンドウの概要」を参照してください。

開かれている電子メール メッセージごとに作業ウィンドウを作成する方法を示すチュートリアルについては、「チュートリアル : Outlook で電子メール メッセージと共にカスタム作業ウィンドウを表示する」を参照してください。

Outlook イベント

エクスプローラ ウィンドウの状態を監視するには、次のエクスプローラ関連のイベントを処理します。

インスペクタ ウィンドウの状態を監視するには、次のインスペクタ関連のイベントを処理します。

Outlook における複数インスタンスのカスタム作業ウィンドウの回避

Outlook のウィンドウに複数インスタンスのカスタム作業ウィンドウが表示されないようにするには、ウィンドウが閉じるたびに ThisAddIn クラスの CustomTaskPanes コレクションをカスタム作業ウィンドウから明示的に削除します。ウィンドウが閉じるときに発生する ExplorerEvents_10_Event.CloseInspectorEvents_10_Event.Close などのイベントで、Remove メソッドを呼び出します。

カスタム作業ウィンドウを明示的に削除しない場合は、Outlook のウィンドウに複数インスタンスのカスタム作業ウィンドウが表示される可能性があります。Outlook ではウィンドウが再利用されることがあり、再利用されたウィンドウでは、関連付けられていたカスタム作業ウィンドウへの参照が保持されます。

Word と InfoPath

Word と InfoPath は、個別のドキュメント フレーム ウィンドウを使用して各文書 (各ドキュメント) を表示します。これらのアプリケーション用にカスタム作業ウィンドウを作成すると、カスタム作業ウィンドウは特定の文書 (ドキュメント) にのみ関連付けられます。ユーザーが別の文書 (ドキュメント) を開くと、今まで表示されていた文書 (ドキュメント) が再び表示されるまで、カスタム作業ウィンドウは非表示になります。

複数のドキュメントがある場合に 1 つのカスタム作業ウィンドウを表示するには、ユーザーがドキュメントを新規作成するか、既存のドキュメントを開くときに、カスタム作業ウィンドウの新しいインスタンスを作成します。この操作を行うには、ドキュメントが作成されるか開かれるときに発生するイベントを処理し、イベント ハンドラで作業ウィンドウを作成します。ドキュメント イベントを処理し、表示するドキュメント (文書) に応じて、作業ウィンドウの表示/非表示を切り替えることもできます。

作業ウィンドウを特定のドキュメント ウィンドウに関連付けるには、CustomTaskPaneCollection.Add(UserControl, String, Object) メソッドを使用して作業ウィンドウを作成するか、Microsoft.Office.Interop.Word.Window (Word の場合) または Microsoft.Office.Interop.InfoPath.WindowObject (InfoPath の場合) を window パラメータに渡します。カスタム作業ウィンドウの作成の詳細については、「カスタム作業ウィンドウの概要」を参照してください。

Word イベント

Word の文書ウィンドウの状態を監視するには、次のイベントを処理します。

InfoPath イベント

InfoPath のドキュメント ウィンドウの状態を監視するには、次のイベントを処理します。

Excel と PowerPoint

Excel と PowerPoint では、すべてのドキュメント (ブックおよびプレゼンテーション) に対して 1 つのドキュメント フレーム ウィンドウを作成します。これらのアプリケーションで作成したカスタム作業ウィンドウは、アプリケーション内で開いているすべてのドキュメントに対して利用可能です。追加の作業を行わなくても、各ドキュメントに対して作業ウィンドウが表示されます。

ただし、アクティブになっているドキュメントに応じて、作業ウィンドウの表示/非表示を切り替えたり、作業ウィンドウに別のユーザー インターフェイス (UI) 要素やデータを表示したりすることが必要になる場合があります。この操作を行うには、ドキュメントが作成されるか、開かれるか、アクティブになったときに発生するイベントを処理し、イベント ハンドラで作業ウィンドウを更新します。

Excel イベント

Excel のブックの状態を監視するには、次のイベントを処理します。

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

次のコード例は、Excel アドインにおける WorkbookActivate イベントのイベント ハンドラでカスタム作業ウィンドウの表示/非表示を行う方法を示したものです。各ブックがアクティブになったとき、ブックの名前が SalesData.xls である場合にのみ、作業ウィンドウが表示されます。それ以外の場合は、作業ウィンドウは非表示になります。この例を実行するには、Visual Studio Tools for Office が ThisAddIn クラスに作成する既定の ThisAddIn_Startup イベント ハンドラを、次のコードで置き換えます。この例では、プロジェクトに UserControl1 という名前の UserControl が含まれていることを前提としています。

Dim myUserControl As UserControl1
Dim myCustomTaskPane As Microsoft.Office.Tools.CustomTaskPane

Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Startup
    myUserControl = New UserControl1()
    myCustomTaskPane = Me.CustomTaskPanes.Add(myUserControl, "Sales Task Pane")
End Sub

Private Sub Application_WorkbookActivate(ByVal Wb As Excel.Workbook) _
    Handles Application.WorkbookActivate

    If Wb.Name = "SalesData.xlsx" Then
        myCustomTaskPane.Visible = True
    Else
        myCustomTaskPane.Visible = False
    End If
End Sub
private UserControl1 myUserControl;
private Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.WorkbookActivate += new Excel.AppEvents_WorkbookActivateEventHandler(
        Application_WorkbookActivate);

    myUserControl = new UserControl1();
    myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl, "Sales Task Pane");
}

void Application_WorkbookActivate(Excel.Workbook Wb)
{
    if (Wb.Name == "SalesData.xlsx")
        myCustomTaskPane.Visible = true;
    else
        myCustomTaskPane.Visible = false;
}

参照

処理手順

方法 : カスタム作業ウィンドウをアプリケーションに追加する

チュートリアル : Outlook で電子メール メッセージと共にカスタム作業ウィンドウを表示する

方法 : Outlook で電子メール メッセージと共にカスタム作業ウィンドウを表示する

チュートリアル : カスタム作業ウィンドウとリボン ボタンの同期

概念

カスタム作業ウィンドウの概要