自定义任务窗格

任务窗格是通常停靠在 Microsoft Office 应用程序中某一窗口一侧的用户界面面板。自定义任务窗格为您提供了一个方法,使您可以创建自己的任务窗格并为用户提供熟悉的界面来访问您的解决方案的功能。例如,界面可以包含运行代码以修改文档或显示来自数据源的数据的控件。

**适用于:**本主题中的信息适用于 Outlook 2013 和 Outlook 2010 的应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

说明说明

自定义任务窗格与操作窗格不同。操作窗格是 Microsoft Office Word 和 Microsoft Office Excel 的文档级自定义项的一部分。有关更多信息,请参见操作窗格概述

自定义任务窗格的优点

使用自定义任务窗格,可以将各种功能集成到一个熟悉的用户界面中。可以使用 Visual Studio 工具快速创建自定义任务窗格。

Aa942864.collapse_all(zh-cn,VS.110).gif熟悉的用户界面

Microsoft Office system 中应用程序的用户已经熟悉使用任务窗格了,例如 Word 中的**“样式和格式”**任务窗格。自定义任务窗格的行为类似于 Microsoft Office system 中的其他任务窗格。用户可以将自定义任务窗格停靠在应用程序窗口的不同侧,或者可以将自定义任务窗格拖动到窗口中的任何位置。可以创建一个外接程序,使之同时显示多个自定义任务窗格,而且用户可以分别控制每个任务窗格。

Aa942864.collapse_all(zh-cn,VS.110).gifWindows 窗体支持

使用 Visual Studio 中的 Office 开发工具创建的自定义任务窗格的用户界面基于 Windows 窗体控件。可以使用熟悉的 Windows 窗体设计器为自定义任务窗格设计用户界面。还可以使用 Windows 窗体中的数据绑定支持将数据源绑定到任务窗格上的控件。

创建自定义任务窗格

可以用下面两个步骤创建基本的自定义任务窗格:

  1. 将 Windows 窗体控件添加到 UserControl 对象来为自定义任务窗格创建用户界面。

  2. 将用户控件传递到外接程序中的 CustomTaskPaneCollection 对象以实例化自定义任务窗格。此集合返回一个新的 CustomTaskPane 对象,可用以修改任务窗格的外观并响应用户事件。

有关更多信息,请参见如何:向应用程序中添加自定义任务窗格

Aa942864.collapse_all(zh-cn,VS.110).gif创建用户界面

使用 Visual Studio 中的 Office 开发工具创建的所有自定义任务窗格都包含一个 UserControl 对象。此用户控件提供自定义任务窗格的用户界面。可以在设计时或运行时创建用户控件。如果在设计时创建用户控件,可以使用 Windows 窗体设计器构造任务窗格的用户界面。

Aa942864.collapse_all(zh-cn,VS.110).gif实例化自定义任务窗格

创建包含自定义任务窗格用户界面的用户控件后,必须实例化 CustomTaskPane。若要执行此操作,请调用一个 Add 方法将用户控件传递到 CustomTaskPaneCollection。此集合公开为 ThisAddIn 类的 CustomTaskPanes 字段。下面的代码示例应从 ThisAddIn 类中运行。

myUserControl1 = New MyUserControl
myCustomTaskPane = Me.CustomTaskPanes.Add(myUserControl1, "My Task Pane")
myCustomTaskPane.Visible = True
myUserControl1 = new MyUserControl();
myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1, "My Task Pane");
myCustomTaskPane.Visible = true;

Add 方法返回一个新的 CustomTaskPane 对象。您可以使用此对象修改任务窗格的外观和响应用户事件。

Aa942864.collapse_all(zh-cn,VS.110).gif在多个窗口中控制任务窗格

自定义任务窗格与文档框架窗口关联,该窗口向用户呈现文档或项的视图。只有当关联的窗口可见时,该任务窗格才可见。

若要确定哪个窗口显示自定义任务窗格,请使用在创建任务窗格时的相应 Add 方法重载:

在多个窗口处于打开状态的情况下,某些 Office 应用程序需要显式指令来确定何时创建或显示任务窗格。因此,务必要考虑在代码中的何处实例化自定义任务窗格,以确保任务窗格与应用程序中的相应文档或项一起出现。有关更多信息,请参见 在 Windows 应用程序的托管自定义任务窗格。

从任务窗格中访问应用程序

如果要从用户控件中自动处理应用程序,您可以通过在代码中使用 Globals.ThisAddIn.Application 来直接访问对象模型。静态 Globals 类提供对 ThisAddIn 对象的访问。此对象的 Application 字段是进入应用程序对象模型的入口点。

有关 ThisAddIn 对象的 Application 字段的更多信息,请参见应用程序级外接程序编程。有关演示如何从自定义任务窗格中自动处理应用程序的演练,请参见演练:从自定义任务窗格自动化应用程序。有关 Globals 类的更多信息,请参见对 Office 项目中对象的全局访问

管理任务窗格的用户界面

创建了用户窗格后,您可以使用 CustomTaskPane 对象的属性和事件来控制任务窗格的用户界面,并在用户更改任务窗格时进行响应。

Aa942864.collapse_all(zh-cn,VS.110).gif使自定义任务窗格可见

默认情况下,任务窗格不可见。若要使任务窗格可见,必须将 Visible 属性设置为 true。

用户可以通过单击任务窗格一角的**“关闭”**按钮 (X) 随时关闭任务窗格。但是,没有可供用户再次打开自定义任务窗格的默认方法。如果用户关闭自定义任务窗格,该用户将无法再次查看该自定义任务窗格,除非您为其提供显示窗格的方法。

如果您在外接程序中创建了自定义任务窗格,则还应当创建一个供用户单击来显示或隐藏该自定义任务窗格的 UI 元素,如按钮。如果在支持自定义功能区的 Microsoft Office 应用程序中创建了自定义任务窗格,可以为向功能区中添加一个控件组,其中包含用于显示或隐藏自定义任务窗格的按钮。有关演示如何执行此操作的演练,请参见演练:将自定义任务窗格与功能区按钮同步

如果在不支持自定义功能区的 Microsoft Office 应用程序中创建了自定义任务窗格,可以添加一个显示或隐藏自定义任务窗格的 CommandBarButton

Aa942864.collapse_all(zh-cn,VS.110).gif修改任务窗格的外观

可以使用 CustomTaskPane 对象的属性控制自定义任务窗格的大小和位置。可以使用自定义任务窗格中包含的 UserControl 对象的属性对自定义任务窗格的外观做出许多其他更改。例如,可以使用用户控件的 BackgroundImage 属性为自定义任务窗格指定背景图像。

下表列出使用 CustomTaskPane 属性可以对自定义任务窗格做出的更改。

任务

属性

更改任务窗格的大小

Height

Width

更改任务窗格的位置

DockPosition

隐藏或显示任务窗格

Visible

禁止用户更改任务窗格的位置

DockPositionRestrict

Aa942864.collapse_all(zh-cn,VS.110).gif对自定义任务窗格事件进行编程

您可能希望外接程序在用户修改自定义任务窗格时进行响应。例如,如果用户将窗格方向从垂直更改为水平,您可能要重新定位控件。

下表列出可以对其进行处理以响应用户对自定义任务窗格所做更改的事件。

任务

Event

当用户更改任务窗格的位置时进行响应。

DockPositionChanged

当用户隐藏任务窗格或使其可见时进行响应。

VisibleChanged

清理任务窗格使用的资源

创建了自定义任务窗格后,只要外接程序在运行,CustomTaskPane 对象就会保留在内存中。即使当用户单击任务窗格一角的**“关闭”**按钮 (X) 后,对象仍然保留在内存中。

若要在外接程序仍在运行时清理任务窗格使用的资源,请使用 RemoveRemoveAt 方法。这些方法从 CustomTaskPanes 集合中移除指定的 CustomTaskPane 对象,并调用该对象的 Dispose 方法。

Visual Studio Tools for Office Runtime 会在卸载外接程序时自动清理自定义任务窗格使用的资源。不要在项目中的 ThisAddIn_Shutdown 事件处理程序中调用 Remove 或 RemoveAt 方法。这些方法将引发 ObjectDisposedException,因为 Visual Studio Tools for Office Runtime 会在调用 ThisAddIn_Shutdown 之前清理 CustomTaskPane 对象使用的资源。有关 ThisAddIn_Shutdown 的更多信息,请参见Office 项目中的事件

在多个应用程序 Windows 的托管自定义任务窗格

在使用多个窗口显示文档和其他项的应用程序中创建自定义任务窗格时,您需要进行额外的步骤以确保在用户希望显示任务窗格时任务窗格是可见的。

所有应用程序中的自定义任务窗格都与文档框架窗口关联,该窗口向用户呈现文档或项的视图。只有当关联的窗口可见时,该任务窗格才可见。但是,并非所有应用程序都以相同的方式使用文档框架窗口。

以下应用程序组具有不同的开发要求:

  • Outlook

  • Word、InfoPath 和 PowerPoint

链接到视频 有关相关的视频演示,请参见 How Do I: Manage Task Panes in Word Add-ins?(如何实现:在 Word 外接程序中管理任务窗格。)

Outlook

为 Outlook 创建自定义任务窗格时,自定义任务窗格与特定资源管理器或检查器窗口关联。资源管理器是用于显示文件夹内容的窗口,检查器是用于显示诸如电子邮件或任务等项的窗口。

如果希望为多个资源管理器或检查器窗口显示自定义任务窗格,您需要在资源管理器或检查器窗口打开时创建自定义任务窗格的新实例。为此,请处理在创建资源管理器或检查器窗口时引发的事件,然后在事件处理程序中创建任务窗格。您还可以处理资源管理器和检查器事件以隐藏或显示任务窗格,具体情况视哪个窗口处于可见状态而定。

若要将任务窗格与特定的资源管理器或检查器关联,请使用 CustomTaskPaneCollection.Add(UserControl, String, Object) 方法创建任务窗格,并将 ExplorerInspector 对象传递给 window 参数。有关创建自定义任务窗格的更多信息,请参见自定义任务窗格

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

Aa942864.collapse_all(zh-cn,VS.110).gifOutlook 事件

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

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

Aa942864.collapse_all(zh-cn,VS.110).gif在 Outlook 中禁止显示自定义任务窗格的多个实例

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

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

Word、InfoPath 和 PowerPoint

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

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

若要将任务窗格与特定文档窗口,使用 CustomTaskPaneCollection.Add(UserControl, String, Object) 方法创建任务窗格,并通过 Microsoft.Office.Interop.Word.Window (对于 Word),Microsoft.Office.Interop.InfoPath.WindowObject (对于 InfoPath),或者 Microsoft.Office.Interop.PowerPoint.DocumentWindow (对于 PowerPoint) 到 window 参数。

Aa942864.collapse_all(zh-cn,VS.110).gifWord 事件

若要监控 Word 中文档窗口的状态,您可以处理以下事件:

Aa942864.collapse_all(zh-cn,VS.110).gifInfoPath 事件

若要监控 InfoPath 中文档窗口的状态,您可以处理以下事件:

Aa942864.collapse_all(zh-cn,VS.110).gifPowerPoint 事件

若要监控状态在 PowerPoint 中,您的文档窗口可以处理以下事件:

请参见

任务

如何:向应用程序中添加自定义任务窗格

演练:从自定义任务窗格自动化应用程序

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

演练:为 Outlook 中的电子邮件显示自定义任务窗格