本文概述
尽管没有很多应用程序需要使用与浏览器相同的选项卡结构, 但是知道如何使用它会很有用。如果要在应用程序中创建自己的嵌入式浏览器, 或者使用某种使用倍数画布的设计应用程序, 并且用户可以对其进行修改, 则使用这样的组件可能非常有用。在本文中, 我们将向你展示如何使用EasyTabs组件在C#中的WinForms应用程序中实现浏览器样式选项卡。
1.安装EasyTabs
要使用C#在WinForms应用程序上实现此类选项卡, 你将需要使用EasyTabs库。 EasyTabs是一个很棒的库, 它允许你使用.NET组件在标题栏空间中带有一组选项卡, 类似于Chrome, Firefox, Trillian或其他网络浏览器。它的源代码托管在Github上, 也是一个有用的示例, 可用来深入了解库的工作原理。要在Visual Studio中的项目上安装此软件包, 请转到解决方案资源管理器, 然后右键单击你的项目。从下拉列表中选择管理NuGet软件包选项:
在管理器中, 转到浏览选项卡并搜索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窗体, 则会看到以下内容:
你将收到此错误, 因为如前所述, 设计器试图绘制抽象的东西(一旦扩展了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样式标签:
编码愉快!
评论前必须登录!
注册