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

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

适用于: 本主题中的信息适用于 Outlook 的 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

虽然本演练具体使用的是 Excel,但其中所阐释的概念同样适用于上面所列的应用程序。

本演练阐释了以下任务:

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

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

  • 使用自定义任务窗格同步切换按钮。

注意

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 Visual Studio IDE

先决条件

你需要满足以下条件才能完成本演练:

创建外接程序项目

在此步骤中,你将为 Excel 创建 VSTO 外接程序项目。

创建新项目

  1. 使用 Excel 外接程序项目模板,创建一个名为 SynchronizeTaskPaneAndRibbon的 Excel 外接程序项目。 有关详细信息,请参阅“如何:在 Visual Studio 中创建办公室项目。

    Visual Studio 将打开 ThisAddIn.csThisAddIn.vb 代码文件,并将 SynchronizeTaskPaneAndRibbon 项目添加到 解决方案资源管理器

向功能区添加切换按钮

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

向功能区添加切换按钮

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

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

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

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

  4. 在功能区设计器中,单击“Group1”

  5. 在“属性” 窗口中,将“Label”属性 设置为 Task Pane Manager

  6. 从“工具箱” 的“Office 功能区控件” 选项卡中,将 ToggleButton 拖到“Task Pane Manager” 组。

  7. 单击“toggleButton1”

  8. 在“属性” 窗口中,将“Label”属性 设置为 Show Task Pane

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

没有针对自定义任务窗格的可视化设计器,但可以设计具有所需布局的用户控件。 稍后在本演练中,你将向自定义任务窗格添加用户控件。

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

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

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

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

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

创建自定义任务窗格

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

若要创建自定义任务窗格

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

  2. 右键单击 ThisAddIn.csThisAddIn.vb ,然后单击“查看代码”

  3. 将以下代码添加到 ThisAddIn 类。 此代码将 TaskPaneControl 的实例声明为 ThisAddIn的成员。

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

    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 void taskPaneValue_VisibleChanged(object sender, System.EventArgs e)
    {
        Globals.Ribbons.ManageTaskPaneRibbon.toggleButton1.Checked = 
            taskPaneValue.Visible;
    }
    
  6. ThisAddIn 类添加以下属性。 此属性对其他类公开私有 taskPaneValue 对象。 稍后在本演练中,你将向使用此属性的 MyRibbon 类添加代码。

    public Microsoft.Office.Tools.CustomTaskPane TaskPane
    {
        get
        {
            return taskPaneValue;
        }
    }
    

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

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

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

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

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

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

    private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;
    }
    

测试外接程序

运行项目时,Excel 会打开,但不显示自定义任务窗格。 单击功能区上的切换按钮以测试代码。

测试 VSTO 外接程序

  1. F5 运行项目。

    确认 Excel 打开,并在 功能区上显示“加载项 ”选项卡。

  2. 单击功能区上的“加载项”选项卡。

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

    验证当点击切换按钮时,任务窗格交替显示和隐藏。

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

    验证切换按钮显示为未按下。

后续步骤

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

  • 为其他应用程序在 VSTO 外接程序中创建自定义任务窗格。 有关支持自定义任务窗格的应用程序的详细信息,请参阅 自定义任务窗格

  • 从自定义任务窗格自动化应用程序。 有关详细信息,请参阅 演练:从自定义任务窗格自动执行应用程序。

  • 为 Outlook 中打开的每封电子邮件创建自定义任务窗格。 有关详细信息,请参阅 演练:在 Outlook 中使用电子邮件显示自定义任务窗格。