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

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

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

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

本演练阐释了以下任务:

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

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

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

注释

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

先决条件

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

创建插件项目

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

创建新项目

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

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

向功能区添加切换按钮

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

向功能区添加切换按钮

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

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

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

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

  4. 在功能区设计器中,单击 group1

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

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

  7. 单击 toggleButton1

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

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

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

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

  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 类的属性 CustomTaskPanefalse)。 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)。

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

后续步骤

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