任务窗格是用户界面面板,通常停靠在微软 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 窗体中的数据绑定支持将数据源绑定到任务窗格上的控件。
创建自定义任务窗格
可以通过两个步骤创建基本自定义任务窗格:
通过将 Windows 窗体控件添加到 UserControl 对象,为自定义任务窗格创建用户界面。
通过将用户控件传递给 CustomTaskPaneCollection VSTO 外接程序中的对象来实例化自定义任务窗格。 此集合返回一个新 CustomTaskPane 对象,可用于修改任务窗格的外观并响应用户事件。
有关详细信息,请参阅 “如何:向应用程序添加自定义任务窗格”。
创建用户界面
使用 Visual Studio 中的 Office 开发工具创建的所有自定义任务窗格都包含一个 UserControl 对象。 此用户控件提供自定义任务窗格的用户界面。 可以在设计时或运行时创建用户控件。 如果在设计时创建用户控件,则可以使用 Windows 窗体设计器构造任务窗格的用户界面。
实例化自定义任务窗格
创建包含自定义任务窗格用户界面的用户控件后,必须实例化< c0 />。 为此,请通过调用其中CustomTaskPaneCollection一种方法将用户控件传递给 Add VSTO 外接程序中的控件。 此集合作为 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,请参阅 Program VSTO Add-ins。有关演示如何从自定义任务窗格自动执行应用程序的演练,请参阅演练:从自定义任务窗格自动执行应用程序。 有关该 Globals 类的详细信息,请参阅 对 Office 项目中对象的全局访问。
管理任务窗格的用户界面
创建任务窗格后,可以使用对象的属性和事件 CustomTaskPane 来控制任务窗格的用户界面,并在用户更改任务窗格时做出响应。
使自定义任务窗格可见
默认情况下,任务窗格不可见。 若要使任务窗格可见,必须将属性设置为 Visibletrue。
用户随时可以通过单击任务窗格角落的 “关闭 ”按钮(X)关闭任务窗格。 但是,用户无法再次打开自定义任务窗格的默认方法。 如果用户关闭自定义任务窗格,则除非提供显示自定义任务窗格的方法,否则该用户无法再次查看自定义任务窗格。
如果在 VSTO 外接程序中创建自定义任务窗格,还应创建 UI 元素,例如按钮,用户可以单击该元素来显示或隐藏自定义任务窗格。 如果在支持自定义功能区的 Microsoft Office 应用程序中创建自定义任务窗格,则可以使用显示或隐藏自定义任务窗格的按钮将控件组添加到功能区。 有关说明如何执行此任务的演练,请参阅 演练:将自定义任务窗格与功能区按钮同步。
如果在不支持自定义功能区的 Microsoft Office 应用程序中创建自定义任务窗格,可以添加 CommandBarButton 显示或隐藏自定义任务窗格。
修改任务窗格的外观
可以使用对象的属性 CustomTaskPane 来控制自定义任务窗格的大小和位置。 可以使用包含在自定义任务窗格中的对象的属性 UserControl ,对自定义任务窗格的外观进行许多其他更改。 例如,可以使用用户控件的属性为自定义任务窗格 BackgroundImage 指定背景图像。
下表列出了可以使用 CustomTaskPane 属性对自定义任务窗格所做的更改。
| 任务 | 资产 |
|---|---|
| 更改任务窗格的大小 | Height Width |
| 更改任务窗格的位置 | DockPosition |
| 隐藏任务窗格或使其可见 | Visible |
| 防止用户更改任务窗格的位置 | DockPositionRestrict |
编程自定义任务窗格事件
用户修改自定义任务窗格时,你可能希望 VSTO 外接程序做出响应。 例如,如果用户将窗格的方向从垂直更改为水平,则可能需要重新定位控件。
下表列出了可以处理的事件,以响应用户对自定义任务窗格所做的更改。
| 任务 | 事件 / 活动 |
|---|---|
| 当用户更改任务窗格的位置时做出响应。 | DockPositionChanged |
| 当用户隐藏任务窗格或使其可见时做出响应。 | VisibleChanged |
清理任务窗格使用的资源
创建自定义任务窗格后,只要 VSTO 外接程序正在运行,该 CustomTaskPane 对象就保留在内存中。 即使在用户单击任务窗格角落的 “关闭 ”按钮(X)后,对象仍保留在内存中。
若要在 VSTO 外接程序仍在运行期间清理任务窗格使用的资源,请使用 Remove 或 RemoveAt 方法。 这些方法从CustomTaskPane集合中删除指定的CustomTaskPanes对象,并调用Dispose对象的方法。
卸载 VSTO 外接程序时,Visual Studio Tools for Office 运行时会自动清理自定义任务窗格使用的资源。 不要在项目中的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 创建任务窗格的方法,并将 Window (for Word)、 WindowObject (for InfoPath)或 DocumentWindow (For 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