自定义任务窗格
任务窗格是一个用户界面面板,通常停靠在 Microsoft Office 应用程序中某一窗口的一侧。 自定义任务窗格为你提供了一钟方法,使你可以创建自己的任务窗格并为用户提供熟悉的界面来访问你的解决方案的功能。 例如,界面中可以包含运行代码以修改文档或显示来自数据源的数据的控件。
适用于: 本主题中的信息适用于 Outlook 的 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。
注意
自定义任务窗格不同于操作窗格。 操作窗格是 Microsoft Office Word 和 Microsoft Office Excel 的文档级自定义项的一部分。 有关详细信息,请参阅 “操作”窗格概述。
自定义任务窗格的优点
使用自定义任务窗格,可以将各种功能集成到一个熟悉的用户界面中。 可以使用 Visual Studio 工具快速创建自定义任务窗格。
熟悉的用户界面
Microsoft 办公室系统中应用程序的用户已经熟悉使用任务窗格,例如 Word 中的“样式和格式设置”任务窗格。 自定义任务窗格的行为方式类似于 Microsoft Office system 中的其他任务窗格。 用户可以将自定义任务窗格停靠到应用程序窗口中的各侧,也可将自定义任务窗格拖动到窗口中的任意位置。 可以创建一个 VSTO 外接程序,使之同时显示多个自定义任务窗格,而且用户可以分别控制每个任务窗格。
Windows 窗体支持
使用 Visual Studio 中的 Office 开发工具创建的自定义任务窗格的用户界面基于 Windows 窗体控件。 可以使用熟悉的 Windows 窗体设计器来设计自定义任务窗格的用户界面。 还可以使用 Windows 窗体中的数据绑定支持将数据源绑定到任务窗格中的控件。
创建自定义任务窗格
可以利用下面两个步骤创建基本的自定义任务窗格:
通过将 Windows 窗体控件添加到 UserControl 对象来创建自定义任务窗格的用户界面。
通过将用户控件传递到 VSTO 外接程序中的 CustomTaskPaneCollection 对象来实例化自定义任务窗格。 此集合返回一个新的 CustomTaskPane 对象,可用于修改任务窗格的外观并响应用户事件。
有关详细信息,请参阅 “如何:向应用程序添加自定义任务窗格”。
创建用户界面
使用 Visual Studio 中的 Office 开发工具创建的所有自定义任务窗格均包含一个 UserControl 对象。 此用户控件提供自定义任务窗格的用户界面。 可以在设计时或运行时创建用户控件。 如果在设计时创建用户控件,则可使用 Windows 窗体设计器来构造任务窗格的用户界面。
实例化自定义任务窗格
创建包含自定义任务窗格用户界面的用户控件之后,必须实例化 CustomTaskPane。 若要执行此操作,请通过调用其中一种 Add 方法来传递 VSTO 外接程序中的用户控件 CustomTaskPaneCollection。 此集合公开为 ThisAddIn
类的 CustomTaskPanes
字段。 下面的代码示例应从 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
,请参阅 Program VSTO Add-ins。ThisAddIn
有关演示如何从自定义任务窗格自动执行应用程序的演练,请参阅演练:从自定义任务窗格自动执行应用程序。 有关该Globals
类的详细信息,请参阅对办公室项目中对象的全局访问。
管理任务窗格的用户界面
创建任务窗格之后,可以使用 CustomTaskPane 对象的属性和事件来控制任务窗格的用户界面,并在用户更改任务窗格时进行响应。
使自定义任务窗格可见
默认情况下,任务窗格不可见。 若要使任务窗格可见,必须将属性设置为 Visible true。
用户随时可以通过单击 任务窗格角落的“关闭 ”按钮(X)关闭任务窗格。 但是,没有可供用户再次打开自定义任务窗格的默认方法。 如果用户关闭了自定义任务窗格,那么用户无法再次查看该自定义任务窗格,除非提供一种显示窗格的方法。
如果在 VSTO 外接程序中创建了自定义任务窗格,则还应创建一个可供用户单击来显示或隐藏该自定义任务窗格的 UI 元素,如按钮。 如果在支持自定义功能区的 Microsoft Office 应用程序中创建了自定义任务窗格,则可以向功能区中添加一个控件组,其中包含用于显示或隐藏自定义任务窗格的按钮。 有关演示如何执行此操作的演练,请参阅 演练:将自定义任务窗格与功能区按钮同步。
如果在不支持自定义功能区的 Microsoft Office 应用程序中创建了自定义任务窗格,则可以添加一个显示或隐藏自定义任务窗格的 CommandBarButton。
修改任务窗格的外观
可以使用 CustomTaskPane 对象的属性控制自定义任务窗格的大小和位置。 可以使用自定义任务窗格中包含的 UserControl 对象的属性对自定义任务窗格的外观做出许多其他更改。 例如,可以使用用户控件的 BackgroundImage 属性指定自定义任务窗格的背景图像。
下表列出了使用 CustomTaskPane 属性可以对自定义任务窗格做出的更改。
Task | properties |
---|---|
更改任务窗格的大小 | Height Width |
更改任务窗格的位置 | DockPosition |
隐藏任务窗格或使其可见 | Visible |
阻止用户更改任务窗格的位置 | DockPositionRestrict |
计划自定义任务窗格事件
你可能希望 VSTO 外接程序在用户修改自定义任务窗格时进行响应。 例如,如果用户将窗格方向从垂直更改为水平,你可能希望重新定位控件。
下表列出可以对其进行处理以响应用户对自定义任务窗格所做更改的事件。
任务 | Event |
---|---|
当用户更改任务窗格的位置时进行响应。 | DockPositionChanged |
当用户隐藏任务窗格或使其可见时进行响应。 | VisibleChanged |
清理任务窗格使用的资源
创建自定义任务窗格之后,只要 VSTO 外接程序在运行,CustomTaskPane 对象就会保留在内存中。 即使在用户单击 任务窗格角落的“关闭 ”按钮(X)后,对象仍保留在内存中。
若要在 VSTO 外接程序仍在运行时清理任务窗格使用的资源,请使用 Remove 或 RemoveAt 方法。 这些方法从 CustomTaskPanes
集合中删除指定的 CustomTaskPane 对象,并调用该对象的 Dispose
方法。
卸载 VSTO 外接程序时,Visual Studio Tools for 办公室 运行时会自动清理自定义任务窗格使用的资源。 不要在项目中的ThisAddIn_Shutdown
事件处理程序中调用Remove或RemoveAt方法。 这些方法将引发,ObjectDisposedException因为用于办公室运行时的 Visual Studio 工具会在调用之前ThisAddIn_Shutdown
清理对象使用CustomTaskPane的资源。 有关详细信息ThisAddIn_Shutdown
,请参阅办公室项目中的事件。
在多个应用程序窗口中管理自定义任务窗格
在使用多个窗口显示文档和其他项的应用程序中创建自定义任务窗格时,你需要进行额外的步骤来确保在用户希望显示任务窗格时任务窗格是可见的。
所有应用程序中的自定义任务窗格都与文档框架窗口关联,该窗口向用户呈现文档或项的视图。 仅当关联的窗口可见时,任务窗格才可见。 但是,并非所有应用程序都以相同的方式使用文档框架窗口。
下列应用程序组具有不同的开发需求:
Outlook
为 Outlook 创建自定义任务窗格时,自定义任务窗格与特定资源管理器或检查器窗口关联。 资源管理器是显示文件夹内容的窗口,检查器是显示电子邮件或任务等项的窗口。
如果希望为多个资源管理器或检查器窗口显示自定义任务窗格,则需要在资源管理器或检查器窗口打开时创建自定义任务窗格的新实例。 为此,请处理在创建资源管理器或检查器窗口时引发的事件,然后在事件处理程序中创建任务窗格。 还可以处理资源管理器和检查器事件以隐藏或显示任务窗格,具体情况视哪个窗口处于可见状态而定。
若要将任务窗格与特定的资源管理器或检查器相关联,请使用Add方法创建任务窗格,并将或Inspector对象传递给Explorer窗口参数。 有关创建自定义任务窗格的详细信息,请参阅 自定义任务窗格概述。
-
若要监视检查器窗口的状态,你可以处理以下与检查器相关的事件:
防止 Outlook 中自定义任务窗格的多个实例
若要禁止 Outlook 窗口显示自定义任务窗格的多个实例,应在关闭每个窗口时从 ThisAddIn
类的 CustomTaskPanes
集合中显示删除自定义任务窗格。 调用关闭窗口时引发的事件中的 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 中文档窗口的状态,你可以处理以下事件:
微软。办公室。Interop.PowerPoint.EApplication_Event.AfterNewPresentation
微软。办公室。Interop.PowerPoint.EApplication_Event.AfterPresentationOpen
微软。办公室。Interop.PowerPoint.EApplication_Event.NewPresentation
微软。办公室。Interop.PowerPoint.EApplication_Event.PresentationOpen
微软。办公室。Interop.PowerPoint.EApplication_Event.WindowDeactivate