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

此演练演示如何创建一个自定义任务窗格,用户可通过单击功能区上的切换按钮来隐藏或显示该窗格。 应始终要创建一个用户可单击以显示或隐藏自定义任务窗格的用户界面 (UI) 元素(比如按钮),因为 Microsoft Office 应用程序未提供可供用户显示或隐藏自定义任务窗格的默认方法。

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

尽管此演练专门使用 Excel,但该演练演示的概念适用于上面列出的任何应用程序。

本演练阐释了以下任务:

  • 设计自定义任务窗格的 UI。

  • 向功能区中添加一个切换按钮。

  • 将切换按钮与自定义任务窗格同步。

提示

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置

系统必备

您需要以下组件来完成本演练:

-

Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
  • Microsoft Office Excel 2007 或 Microsoft Excel 2010。

创建外接程序项目

在此步骤中,将创建一个 Excel 外接程序项目。

创建新项目

  • 使用 Excel 外接程序项目模板,创建一个名为“SynchronizeTaskPaneAndRibbon”的 Excel 外接程序项目。 有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目

    Visual Studio 打开 ThisAddIn.cs 或 ThisAddIn.vb 代码文件,并将**“SynchronizeTaskPaneAndRibbon”项目添加到“解决方案资源管理器”**中。

向功能区中添加切换按钮

Office 应用程序的设计准则之一是:用户应始终能控制 Office 应用程序 UI。 为了使用户能够控制自定义任务窗格,您可以添加一个用于显示和隐藏任务窗格的功能区切换按钮。 若要创建切换按钮,请将**“功能区(可视化设计器)”**项添加到项目。 设计器可帮助您添加和放置控件、设置控件属性以及处理控件事件。 有关更多信息,请参见功能区设计器

向功能区中添加切换按钮

  1. 在**“项目”菜单上,单击“添加新项”**。

  2. 在**“添加新项”对话框中,选择“功能区(可视化设计器)”**。

  3. 将新功能区更名为 ManageTaskPaneRibbon,然后单击**“添加”**。

    ManageTaskPaneRibbon.cs 或 ManageTaskPaneRibbon.vb 文件将在功能区设计器中打开,并显示一个默认选项卡和组。

  4. 在功能区设计器中,单击**“group1”**。

  5. 在**“属性”窗口中,将“Label”**属性设置为“任务窗格管理器”。

  6. 从**“工具箱”“Office 功能区控件”选项卡中,将“ToggleButton”拖到“任务窗格管理器”**组上。

  7. 单击**“toggleButton1”**。

  8. 在**“属性”窗口中,将“Label”**属性设置为“显示任务窗格”。

设计自定义任务窗格的用户界面。

自定义任务窗格没有可视化设计器,但您可以设计具有所需布局的用户控件。 在本演练后面的部分中,您将把此用户控件添加到自定义任务窗格。

设计自定义任务窗格的用户界面

  1. 在**“项目”菜单上,单击“添加用户控件”**。

  2. 在**“添加新项”对话框中,将用户控件的名称改为 TaskPaneControl,然后单击“添加”**。

    该用户控件即在设计器中打开。

  3. 从**“工具箱”“公共控件”选项卡中,将“TextBox”**控件拖到用户控件中。

创建自定义任务窗格

若要在外接程序启动时创建自定义任务窗格,请在外接程序的 Startup 事件处理程序中将用户控件添加到任务窗格。 默认情况下,自定义任务窗格将不可见。 在此演练的后面,您将添加代码,当用户单击您添加到功能区的切换按钮时,该代码将显示或隐藏任务窗格。

创建自定义任务窗格

  1. 在**“解决方案资源管理器”中展开“Excel”**。

  2. 右击**“ThisAddIn.cs”“ThisAddIn.vb”,然后单击“查看代码”**。

  3. 向 ThisAddIn 类中添加下面的代码。 此代码将 TaskPaneControl 的一个实例声明为 ThisAddIn 的成员。

    Private taskPaneControl1 As TaskPaneControl
    Private WithEvents taskPaneValue As Microsoft.Office.Tools.CustomTaskPane
    
    private TaskPaneControl taskPaneControl1;
    private Microsoft.Office.Tools.CustomTaskPane taskPaneValue;
    
  4. 用下面的代码替换 ThisAddIn_Startup 事件处理程序。 此代码将 TaskPaneControl 对象添加到 CustomTaskPanes 字段,但它不会显示自定义任务窗格(默认情况下,CustomTaskPane 类的 Visible 属性为 false)。 Visual C# 代码还会将事件处理程序附加到 VisibleChanged 事件。

    Private Sub ThisAddIn_Startup(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Startup
    
        taskPaneControl1 = New TaskPaneControl()
        taskPaneValue = Me.CustomTaskPanes.Add( _
            taskPaneControl1, "MyCustomTaskPane")
    End Sub
    
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        taskPaneControl1 = new TaskPaneControl();
        taskPaneValue = this.CustomTaskPanes.Add(
            taskPaneControl1, "MyCustomTaskPane");
        taskPaneValue.VisibleChanged +=
            new EventHandler(taskPaneValue_VisibleChanged);
    }
    
  5. 将下面的方法添加到 ThisAddIn 类中。 此方法处理 VisibleChanged 事件。 当用户通过单击**“关闭”**按钮 (X) 关闭任务窗格时,此方法将更新功能区上切换按钮的状态。

    Private Sub taskPaneValue_VisibleChanged(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles taskPaneValue.VisibleChanged
    
        Globals.Ribbons.ManageTaskPaneRibbon.ToggleButton1.Checked = taskPaneValue.Visible
    End Sub
    
    private void taskPaneValue_VisibleChanged(object sender, System.EventArgs e)
    {
        Globals.Ribbons.ManageTaskPaneRibbon.toggleButton1.Checked = 
            taskPaneValue.Visible;
    }
    
  6. 将以下属性添加到 ThisAddIn 类中。 此属性向其他类公开私有 myCustomTaskPane1 对象。 在此演练的后面,您将向使用此属性的 MyRibbon 类中添加代码。

    Public ReadOnly Property TaskPane() As Microsoft.Office.Tools.CustomTaskPane
        Get
            Return taskPaneValue
        End Get
    End Property
    
    public Microsoft.Office.Tools.CustomTaskPane TaskPane
    {
        get
        {
            return taskPaneValue;
        }
    }
    

使用切换按钮隐藏和显示自定义任务窗格

最后一步是添加当用户单击功能区上的切换按钮时可显示或隐藏自定义任务窗格的代码。

使用切换按钮显示和隐藏自定义任务窗格

  1. 在功能区设计器中,双击**“显示任务窗格”**切换按钮。

    Visual Studio 将自动生成一个名为 toggleButton1_Click 的事件处理程序,该事件处理程序可处理切换按钮的 Click 事件。 Visual Studio 还会在代码编辑器中打开 MyRibbon.cs 或 MyRibbon.vb 文件。

  2. 用下面的代码替换 toggleButton1_Click 事件处理程序。 当用户单击切换按钮时,此代码将显示或隐藏自定义任务窗格,具体情况取决于切换按钮是处于按下还是未按下状态。

    Private Sub ToggleButton1_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles ToggleButton1.Click
    
        Globals.ThisAddIn.TaskPane.Visible = _
            TryCast(sender, Microsoft.Office.Tools.Ribbon.RibbonToggleButton).Checked
    End Sub
    
    private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;
    }
    

测试外接程序

当您运行项目时,Excel 将打开并且未显示自定义任务窗格。 单击功能区上的切换按钮以测试代码。

测试外接程序

  1. 按 F5 运行项目。

    确认 Excel 已打开,并且**“外接程序”**选项卡出现在功能区上。

  2. 单击功能区上的**“外接程序”**选项卡。

  3. 在**“任务窗格管理器”组中,单击“显示任务窗格”**切换按钮。

    验证单击切换按钮时是否会交替显示和隐藏任务窗格。

  4. 当任务窗格处于可见状态时,单击任务窗格一角的**“关闭”**按钮 (X)。

    验证切换按钮是否显示为未按下状态。

后续步骤

可从以下主题中了解有关如何创建自定义任务窗格的更多信息:

请参见

任务

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

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

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

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

概念

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

其他资源

自定义任务窗格概述

功能区概述