个性化阅读
专注于IT技术分析

在WinForms中使用EasyTabs创建具有Chrome样式选项卡的C#应用​​程序

本文概述

尽管没有很多应用程序需要使用与浏览器相同的选项卡结构, 但是知道如何使用它会很有用。如果要在应用程序中创建自己的嵌入式浏览器, 或者使用某种使用倍数画布的设计应用程序, 并且用户可以对其进行修改, 则使用这样的组件可能非常有用。在本文中, 我们将向你展示如何使用EasyTabs组件在C#中的WinForms应用程序中实现浏览器样式选项卡。

1.安装EasyTabs

要使用C#在WinForms应用程序上实现此类选项卡, 你将需要使用EasyTabs库。 EasyTabs是一个很棒的库, 它允许你使用.NET组件在标题栏空间中带有一组选项卡, 类似于Chrome, Firefox, Trillian或其他网络浏览器。它的源代码托管在Github上, 也是一个有用的示例, 可用来深入了解库的工作原理。要在Visual Studio中的项目上安装此软件包, 请转到解决方案资源管理器, 然后右键单击你的项目。从下拉列表中选择管理NuGet软件包选项:

NuGet包管理器项目Visual Studio

在管理器中, 转到浏览选项卡并搜索EasyTabs软件包:

安装EasyTabs

选择第一个软件包, 即Luke Stratman的EasyTabs, 并将其安装在你的项目中。安装完成后, 你将可以在代码上使用EasyTabs命名空间。

2.创建一个简单的测试表格

选项卡遵循以下原则:每个创建的选项卡都是本机Form的一个实例, 因此我们将创建的一个(即Form1)将成为每个创建的Tab的内容。你可以在创建AppContainer的下一步中通过条件更改此行为, 但是, 为了使你的应用快速运行并了解库的工作原理, 建议你使用一个简单的Form对其进行测试。

在此示例中, 我们的Form1非常简单, 并且具有许多本机组件, 但是它们什么也不做:

表单设计简单

但是, 特殊之处在于代码内部。你的表单需要具有用于返回ParentForm的ParentTabs属性的吸气剂, 因此请确保将属性添加到表单的源代码中:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// 1. Use Easy Tabs
using EasyTabs;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        // 2. Important: Declare ParentTabs
        protected TitleBarTabs ParentTabs
        {
            get
            {
                return (ParentForm as TitleBarTabs);
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

现在, 可以在容器的选项卡上显示此表单。

3.创建一个AppContainer表单

接下来, 你将需要在应用程序上创建一个新的Form, 以扩展TitleBarTabs UI。从理论上讲, 这种形式并不存在, 并且不能单独查看, 它只是用作选项卡的包装, 这些选项卡稍后将附加在应用程序的入口点中。它的代码内容将非常简单, 并且需要一件简单的事情, 该方法允许用户使用另一个Form实例创建一个新的Tab, 在我们的示例中, 用户创建的每个Tab将是上一步中创建的Form1的实例, 这是为了测试你的应用程序, 你可以更改Form1的内容, 如下所述。

重要

CS文件显然需要是一个Form实例, 而不是简单的C#类, 否则, 每个Form上可用的InitializeComponent方法将不可用, 并且你的代码也不会编译。这可以使用”解决方案资源管理器”区域中的助手在创建表单期间确定。

using System;
// Use EasyTabs
using EasyTabs;

namespace YOUR_APPLICATION_NAMESPACE
{
    public partial class AppContainer : TitleBarTabs
    {
        public AppContainer()
        {
            InitializeComponent();

            AeroPeekEnabled = true;
            TabRenderer = new ChromeTabRenderer(this);
        }

        // Handle the method CreateTab that allows the user to create a new Tab
        // on your app when clicking
        public override TitleBarTab CreateTab()
        {
            return new TitleBarTab(this)
            {
                // The content will be an instance of another Form
                // In our example, we will create a new instance of the Form1
                Content = new Form1
                {
                    Text = "New Tab"
                }
            };
        }

        // The rest of the events in your app here if you need to .....
    }
}

请注意, 如果你尝试在Visual Studio设计器中查看AppContainer窗体, 则会看到以下内容:

设计器错误EasyTabs

你将收到此错误, 因为如前所述, 设计器试图绘制抽象的东西(一旦扩展了TitleBarTabs而不是Form, 我们的表单就是抽象的), 因此仅当你尝试在表单中看到Form时才会抛出异常。设计师, 否则完全有效。

4.将应用程序的入口点设置为AppContainer

继续更改主Program.cs文件的代码, 即应用程序的入口点。在这里, 你需要指示应使用TitleBarTabsApplicationContext而不是默认应用程序启动应用程序(AppContainer的实例)。在这里, 你将指示在你的应用程序中创建的第一个选项卡的内容, 因为这是一个简单的教程, 所以它也是在步骤2中创建的Form1的实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using EasyTabs;

namespace YOUR_APPLICATION_NAMESPACE
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            AppContainer container = new AppContainer();

            // Add the initial Tab
            container.Tabs.Add(
                // Our First Tab created by default in the Application will have as content the Form1
                new TitleBarTab(container)
                {
                    Content = new Form1
                    {
                        Text = "New Tab"
                    }
                }
            );

            // Set initial tab the first one
            container.SelectedTabIndex = 0;

            // Create tabs and start application
            TitleBarTabsApplicationContext applicationContext = new TitleBarTabsApplicationContext();
            applicationContext.Start(container);
            Application.Run(applicationContext);
        }
    }
}

作为最后一步, 你可以像通常一样启动应用程序, 而不必使用无聊的默认表单, 现在你将能够使用Chrome样式标签:

WinForms C#中的Chrome样式选项卡

编码愉快!

赞(0)
未经允许不得转载:srcmini » 在WinForms中使用EasyTabs创建具有Chrome样式选项卡的C#应用​​程序

评论 抢沙发

评论前必须登录!