在多个应用程序窗口中管理自定义任务窗格

更新: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) 方法创建任务窗格,并将 ExplorerInspector 对象传递给 window 参数。有关创建自定义任务窗格的更多信息,请参见自定义任务窗格概述

有关演示如何为每个打开的电子邮件创建任务窗格的演练,请参见演练:为 Outlook 中的电子邮件显示自定义任务窗格

Outlook 事件

若要监控资源管理器窗口的状态,您可以处理以下与资源管理器相关的事件:

若要监控检查器窗口的状态,您可以处理以下与检查器相关的事件:

在 Outlook 中禁止显示自定义任务窗格的多个实例

若要禁止 Outlook 窗口显示自定义任务窗格的多个实例,应在关闭每个窗口时从 ThisAddIn 类的 CustomTaskPanes 集合中显式移除该自定义任务窗格。请在关闭窗口时引发的某个事件(例如 ExplorerEvents_10_Event.CloseInspectorEvents_10_Event.Close)中调用 Remove 方法。

如果不显式移除自定义任务窗格,Outlook 窗口可能会显示该自定义任务窗格的多个实例。Outlook 有时会回收窗口,回收的窗口将保留对曾附加到该窗口的任何自定义任务窗格的引用。

Word 和 InfoPath

Word 和 InfoPath 会在不同的文档框架窗口中显示每个文档。为这些应用程序创建自定义任务窗格时,自定义任务窗格只与特定文档关联。如果用户打开其他文档,自定义任务窗格将会隐藏,直至之前的文档再次处于可见状态为止。

若要为多个文档显示自定义任务窗格,请在用户创建新文档或打开现有文档时创建该自定义任务窗格的新实例。为此,请处理在创建或打开文档时引发的事件,然后在事件处理程序中创建任务窗格。您还可以处理文档事件以隐藏或显示任务窗格,具体情况视哪个文档处于可见状态而定。

若要将任务窗格与特定的文档窗口关联,请使用 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 会为所有文档(即工作簿和演示文稿)创建一个文档框架窗口。在这些应用程序中创建自定义任务窗格时,任务窗格将可供应用程序中每个打开的文档使用。就您而言,无需执行任何额外的工作就可以确保为每个文档显示任务窗格。

但是,视哪个文档处于活动状态而定,您可能需要隐藏或显示任务窗格,或者可能需要在任务窗格中显示不同的用户界面 (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 中的电子邮件显示自定义任务窗格

演练:将自定义任务窗格与功能区按钮同步

概念

自定义任务窗格概述