在多个应用程序窗口中管理自定义任务窗格
更新:2010 年 5 月
在使用多个窗口显示文档和其他项的应用程序中创建自定义任务窗格时,您需要进行额外的步骤以确保在用户希望显示任务窗格时任务窗格是可见的。
**适用于:**本主题中的信息适用于以下应用程序的应用程序级项目:Excel 2007 和 Excel 2010;InfoPath 2007 和 InfoPath 2010;Outlook 2007 和 Outlook 2010;PowerPoint 2007 和 PowerPoint 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
所有应用程序中的自定义任务窗格都与文档框架窗口关联,该窗口向用户呈现文档或项的视图。 只有当关联的窗口可见时,该任务窗格才可见。 但是,并非所有应用程序都以相同的方式使用文档框架窗口。
以下应用程序组具有不同的开发要求:
Outlook
Word、InfoPath 和 PowerPoint 2010
Excel 和 PowerPoint 2007
有关相关的视频演示,请参见 How Do I: Manage Task Panes in Word Add-ins?(如何实现:在 Word 外接程序中管理任务窗格。)。
Outlook
为 Outlook 创建自定义任务窗格时,自定义任务窗格与特定资源管理器或检查器窗口关联。 资源管理器是用于显示文件夹内容的窗口,检查器是用于显示诸如电子邮件或任务等项的窗口。
如果希望为多个资源管理器或检查器窗口显示自定义任务窗格,您需要在资源管理器或检查器窗口打开时创建自定义任务窗格的新实例。 为此,请处理在创建资源管理器或检查器窗口时引发的事件,然后在事件处理程序中创建任务窗格。 您还可以处理资源管理器和检查器事件以隐藏或显示任务窗格,具体情况视哪个窗口处于可见状态而定。
若要将任务窗格与特定的资源管理器或检查器关联,请使用 CustomTaskPaneCollection.Add(UserControl, String, Object) 方法创建任务窗格,并将 Explorer 或 Inspector 对象传递给 window 参数。 有关创建自定义任务窗格的更多信息,请参见自定义任务窗格概述。
有关演示如何为每个打开的电子邮件创建任务窗格的演练,请参见演练:为 Outlook 中的电子邮件显示自定义任务窗格。
Outlook 事件
若要监控资源管理器窗口的状态,您可以处理以下与资源管理器相关的事件:
若要监控检查器窗口的状态,您可以处理以下与检查器相关的事件:
在 Outlook 中禁止显示自定义任务窗格的多个实例
若要禁止 Outlook 窗口显示自定义任务窗格的多个实例,应在关闭每个窗口时从 ThisAddIn 类的 CustomTaskPanes 集合中显式移除该自定义任务窗格。 请对关闭窗口时引发的事件(例如 ExplorerEvents_10_Event.Close 或 InspectorEvents_10_Event.Close)中调用 Remove 方法。
如果不显式移除自定义任务窗格,Outlook 窗口可能会显示该自定义任务窗格的多个实例。 Outlook 有时会回收窗口,回收的窗口将保留对曾附加到该窗口的任何自定义任务窗格的引用。
Word、InfoPath 和 PowerPoint 2010
Word、InfoPath 和 PowerPoint 2010 会在不同的文档框架窗口中显示每个文档。 为这些应用程序创建自定义任务窗格时,自定义任务窗格只与特定文档关联。 如果用户打开其他文档,自定义任务窗格将会隐藏,直至之前的文档再次处于可见状态为止。
若要为多个文档显示自定义任务窗格,请在用户创建新文档或打开现有文档时创建该自定义任务窗格的新实例。 为此,请处理在创建或打开文档时引发的事件,然后在事件处理程序中创建任务窗格。 您还可以处理文档事件以隐藏或显示任务窗格,具体情况视哪个文档处于可见状态而定。
若要将任务窗格与特定的文档窗口关联,请使用 CustomTaskPaneCollection.Add(UserControl, String, Object) 方法创建任务窗格,并将 Microsoft.Office.Interop.Word.Window(对于 Word)、Microsoft.Office.Interop.InfoPath.WindowObject(对于 InfoPath)或 Microsoft.Office.Interop.PowerPoint.DocumentWindow(对于 PowerPoint)传递给 window 参数。
有关更多信息,请参见在多个 Word 和 InfoPath 文档中管理任务窗格。 本文专门针对 Word 和 InfoPath,但其中的一些概念也适用于 PowerPoint 2010,因为此版本的 PowerPoint 具有单文档界面。
Word 事件
若要监控 Word 中文档窗口的状态,您可以处理以下事件:
InfoPath 事件
若要监控 InfoPath 中文档窗口的状态,您可以处理以下事件:
PowerPoint 事件
若要监控 PowerPoint 2010 中文档窗口的状态,可以处理以下事件:
Excel 和 PowerPoint 2007
Excel 和 PowerPoint 2007 会为所有文档(即工作簿和演示文稿)创建一个文档框架窗口。 在这些应用程序中创建自定义任务窗格时,任务窗格将可供应用程序中每个打开的文档使用。 就您而言,无需执行任何额外的工作就可以确保为每个文档显示任务窗格。
但是,视哪个文档处于活动状态而定,您可能需要隐藏或显示任务窗格,或者可能需要在任务窗格中显示不同的用户界面 (UI) 元素或数据。 为此,请处理在创建、打开或激活文档时引发的事件,然后在事件处理程序中更新任务窗格。
Excel 事件
若要监控 Excel 中工作簿的状态,您可以处理以下事件:
PowerPoint 事件
若要监控 PowerPoint 2007 中演示文稿的状态,可以处理以下事件:
示例
下面的代码示例演示如何在 Excel 外接程序的 WorkbookActivate 事件的事件处理程序中隐藏或显示自定义任务窗格。 激活每个工作簿时,只有当工作簿名为 SalesData.xls 时,任务窗格才可见;否则任务窗格将处于隐藏状态。 若要运行此示例,请将 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;
}
请参见
任务
其他资源
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 5 月 |
增加了有关管理 PowerPoint 2010 中的自定义任务的详细信息。 |
信息补充。 |