Sciter是一个跨平台的HTML引擎,可以免费用于商业用途。可以仅使用Sciter来创建整个应用程序,或者将其作为WinForms应用程序的子控件嵌入。要在C#中使用Sciter,需要SciterSharp库,它提供了对官方C/C++ SDK头文件的.NET绑定,而是这个库的作者。如果是Sciter的新手,可以阅读入门教程文章。本文将简要解释如何在WinForms中将Sciter作为子控件使用。
这里使用Sciter Bootstrap,这是一个在线自动化工具,可以为创建WinForms+ Sciter项目。如果是从头开始,可以使用这种方法。该项目已经安装了SciterSharp NuGet,并且包含了样板代码。
访问 ,输入项目标题,选择C#- Classic desktop部分中的WinForms单选按钮,然后点击下载按钮。解压后,只需在Visual Studio中打开解决方案,编译并运行即可!
如果已经有一个WinForms项目,或者不想使用Sciter Bootstrap,需要手动安装SciterSharp并将sciter.dll添加到项目中。
打开或创建一个新的WinForms项目。安装SciterSharp NuGet:
PM> Install-Package SciterSharpWindows
将sciter.dll添加到项目中(右键点击项目,然后选择'添加 / 现有项..')。注意:必须根据项目属性/构建标签中选择的'平台目标',添加适当的x86或x64版本的sciter.dll。
在sciter.dll的属性窗口中,将'复制到输出目录'属性配置为'始终复制',这样在运行项目时就能找到sciter DLL:
编辑Form1的代码后台(点击Form1.cs并按F7),使其看起来像:
using System;
using System.Drawing;
using System.Windows.Forms;
using SciterSharp.WinForms;
namespace ProcessTable
{
public partial class Form1 : Form
{
private SciterControl _sciter_ctrl;
public Form1()
{
InitializeComponent();
_sciter_ctrl = new SciterControl();
_sciter_ctrl.Location = new Point(15, 15);
_sciter_ctrl.Size = new Size(500, 350);
_sciter_ctrl.HandleCreated += SciterControl1_HandleCreated;
Controls.Add(_sciter_ctrl);
}
private void SciterControl1_HandleCreated(object sender, EventArgs e)
{
// 进行任何需要的初始化
_sciter_ctrl.SciterWnd.LoadHtml(
""
);
}
}
}
注意只是将SciterControl直接添加到主窗体的Controls集合中。如果需要,可以调整位置、大小和父控件。
为了加载控件的实际HTML,需要等待其窗口句柄被创建,这就是为什么初始化必须在HandleCreated事件中进行。编译并运行,输出应该如下所示:
如果更喜欢传统的拖放控件到工具箱中进行WYSIWYG(所见即所得)的UI设计,可以按照这种方法操作。在设计器中,可以添加任意数量的控件,并且可以将控件停靠在父控件中。
首先需要配置工具箱,以便SciterControl出现在列表中。
按照方法2,必须安装SciterSharp NuGet并将sciter.dll添加到项目中。打开Form1的设计器,打开工具箱,右键点击它并选择选择项目,点击浏览,然后定位SciterSharpWindows.dll;SciterControl应该出现在工具箱列表中。从工具箱拖放到设计器中,duuuuu...
注意,它最终并不是真正的WYSIWYG,因为不能在设计时预览加载了HTML的Sciter控件。相反,得到的是以下内容:
注意在图片中添加了两个Sciter控件(右边的一个停靠了),它们只是显示了一些应该如何处理这个控件的说明,比如加载HTML。