整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

DevExpress WinForms-支持HTML & CSS模板全新的DirectX表单

evExpress WinForms控件附带了许多标准的System.Windows.Forms.Form对象对应的对象,在v22.1版本发布新的表单选项之前,让我们一起看看当前所有可用的表单选项。

复制下面地址获取工具

https://www.evget.com/product/2348/download

XtraForm

XtraForm 是标准表单替换的默认选择,这是DevExpress中最基本的“可换肤”表单选项。

下面的列表总结了 XtraForm 中可用的一些独特功能:

  • 接受光栅和矢量图像作为图标(而标准表单对象只能接受“.ico”图像)。
  • XtraForm可以增加其边框的厚度,当您启用OptimizeRemoteConnectionPerformance属性时,会自动激活此模式。
  • 在标题字符串中合并 MDI 文档标题(请参阅ShowMdiChildCaptionInParentTitle 属性)。
  • 可以显示发光效果替代标准阴影(请参阅FormBorderEffect属性)。
  • 支持可附加的操作,Snap Window Behavior允许您实现捕捉到屏幕边缘和彼此的"sticky"窗口,并且持久性操作将用户表单布局自定义保存到注册表。

大多数 XtraForm 功能也可用于 XtraForm 后代,例如工具栏表单。

Ribbon Form

这种类型的DevExpress表单的卖点非常短:在您计划添加功能区时使用它,此表单将其标题栏与我们的WinForms功能区控件合并来创建统一块。

Toolbar Form

这个表单选项将BarItems的两个区域嵌入到其标题栏中,当您不需要具有大量工具栏或功能区操作的专用命令区域时,工具栏表单是完美的。

Tabbed Form

Tabbed Form是为一种特定的 UI 隐喻而构建的——在表单标题栏区域带有选项卡的类似浏览器的窗口,您可以在设计时单击“+”按钮来添加选项卡,每个选项卡都包含自己的可以承载控件的内容容器。

Fluent Design Form

Fluent Design Form绝对是DevExpress WinForms控件中最精致的Form选项。受 Windows 10 启发,此表单在其标题栏中提供操作(类似于工具栏表单中的操作)、基于表单宽度的自适应布局以及与其子 Accordion Control 的高级通信。此外,Form 的侧边区域呈现了半透明的亚克力材质。

DirectX Form

最新的DirectX表单(在 v22.1 中可用)融合了技术团队在过去几年开始的所有突破性计划:高 DPI 支持、DirectX 渲染以及 HTML 和 CSS 模板。

此表单为所有能够使用 DirectX 渲染引擎的子控件启用 DirectX 硬件加速,与标准技术(当您翻转全局 WindowsFormsSettings.ForceDirectXPaint 开关时)相比,DirectX 表单具有以下优点:

  • 为Ribbon控件、Gallery控件、按钮、堆栈和布局面板、编辑器以及以前无法在 DirectX 模式下运行的许多其他控件启用 DirectX 引擎。 例如,SimpleButton 不在 DirectX 兼容的控件列表中,它没有允许您选择首选渲染引擎的单独UseDirectXPaint 属性(例如,与 Data Grid 或 Accordion Control 不同)。但是当放置在 DirectX 窗体上时,这些(以及许多其他控件)在 DirectX 模式下运行。

注意:许多DevExpress WinForms控件(例如,电子表格)不支持 DirectX 呈现,如果您将它们放在 DirectX Form上,这些控件当前不会显示。

  • 所有启用 DirectX 的控件都在单个设备上下文中呈现,从而提供更好的性能(尤其是在具有大量控件的情况下)。
  • 表单调整大小计算更快,调整大小动画更流畅。

DirectX Forms 还接受 HTML 和 CSS 模板,它允许您设计受现代 Web UI 解决方案启发的酷炫表单,下图来自官方的演示中心,展示了此类自定义UI的示例。

初始 DirectX Form 的外观模仿标准 XtraForm 样式,此标准外观存储在默认模板中:

<dx-form-frame id="frame">
<dx-form-titlebar id="titlebar">
<dx-form-icon id="icon"></dx-form-icon>
<dx-form-text id="text"></dx-form-text>
<dx-form-minimizebutton id="minimizebutton"></dx-form-minimizebutton>
<dx-form-maximizebutton id="maximizebutton"></dx-form-maximizebutton>
<dx-form-closebutton id="closebutton"></dx-form-closebutton>
</dx-form-titlebar>
<dx-form-content id="content"></dx-form-content>
</dx-form-frame>

这个默认模板既不需要 CSS 样式也不需要按钮的 onClick 属性——这些标准元素的外观和操作是硬编码的,元素的外观取决于标签名称,其行为通过元素 ID 设置。例如,以下行添加了一个看起来像Close按钮,但行为类似于最小化按钮的按钮。

<dx-form-closebutton id="minimizebutton"></dx-form-closebutton>

此功能允许您在不需要自定义设计时使用标准表单元素,或快速设置自定义元素的行为。 例如,您可以从 <div> 元素创建自定义按钮,并将其 ID 设置为“closebutton”。

如果您的目标是完全自定义表单布局,请从以下模板开始。

<div id="frame" class="frame">
<div id="content">
</div>
</div>
.frame {
height: 100%;
}

这是您可以添加的最短的有效自定义模板 - 没有 "frame" 和 "content"元素 ID 的模板被视为无效。

DevExpress WinForm

DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

年一度的中秋节马上就到啦,小伙伴们收到月饼了吗。

记得我的学生时代,邮件祝福还风靡过一段时间,打开QQ邮箱,各种转发邮件和祝福邮件,现在想想都觉得有点久远了。
相信小伙伴们也都用过群发邮件的功能,例如QQ邮箱,163邮箱等都有提供这种功能,直接发送或者密送都可以。但都会存在一个问题,就是一键发送时,邮件内容都是一样的,无法针对收件人而有个性化的称呼。针对这个需求,我们可以做一个群发邮件的桌面端软件。

我们首先整理下我们需要实现的最简单的功能:

  • 可以输入并记住账号和密码
  • 可以导入收件人信息
  • 可以自由选择收件人
  • 邮件内容可以针对收件人进行个性化修改,可以输入邮件标题,可以附带图片
  • 有发送邮件的功能

需求整理完成,说干就干。

布局

首先新建一个窗体,定义为MainForm。将MainForm的初始状态修改为一打开就最大化。

this.WindowState = FormWindowState.Maximized;

我们可以用GroupBox将Mainform划分为三部分,“登录信息”,“收件人信息”,还有“邮件内容”,如图:

Tips:因为我们默认窗口最大化,所以我们需要先设置三个GroupBox的Anchor属性,依次分别为“Top,Bottom,Left”,“Top,Bottom,Left”和“Top,Bottom,Left,Right”。这样GroupBox就会随窗口大小变化而不至于打乱布局。

控件

划分布局之后,在每一个GroupBox中增加我们需要的控件。

“登录信息”

两个Label(标注“账号”与“密码”);

两个TextBox(用来输入账号与密码);

两个CheckBox(一个用来记住账户密码,一个用来隐藏密码)。

用TextBox输入密码时,我们可以设置TextBox的UseSystemPasswordChar属性为True,则我们输入的文字都会以密文显示。与CheckBox联动,默认勾选CheckBox时,密码以符号显示,不勾选CheckBox时,密码以明文显示。

代码如下:

private void cbShowPwd_CheckedChanged(object sender, EventArgs e)
 {
       if (this.cbShowPwd.Checked == true)
            {
                this.tbPassword.UseSystemPasswordChar = false;
                
            }
            else
            {
                this.tbPassword.UseSystemPasswordChar = true;
            }
}

实际效果如图:

记住账户与密码涉及本地存储,我们后面具体写代码时再来实现这个功能,先按住不提。


“收件人信息”

一个CheckBox(全选功能);

一个CheckListBox(用来显示导入的收件人信息);

两个Button(一个用来导入文件,一个用来确认选择收件人);

一个Label(用来显示已选择的收件人数量)。

关于CheckListBox的相关设置与全选功能具体可以查看我的上一篇文章(「Winform开发小技巧05」批量操作单号-CheckListBox)

全选功能代码:

private void cbSelectAll_CheckedChanged(object sender, EventArgs e)
 {
   //全选功能
            if (this.cbSelectAll.Checked)
            {
                for (int i = 0; i < this.clbReceivers.Items.Count; i++)
                {
                    if (!this.clbReceivers.GetItemChecked(i))
                        this.clbReceivers.SetItemChecked(i,true);
                }
            }
            else
            {
                for (int i = 0; i < this.clbReceivers.Items.Count; i++)
                {
                    if (this.clbReceivers.GetItemChecked(i))
                        this.clbReceivers.SetItemChecked(i, false);
                }
            }
}

这里的操作逻辑是:点击Button导入收件人=>CheckListBox显示收件人=>全选=>Label显示已选人数=>点击Button确认选择,收件人数据传输到下一个部分“邮件内容”。

导入功能我们可以写一个方法,这里先暂时不写。

我们可以先解决Label的显示问题。Label显示选择人数时,需要根据CheckListBox中Item的实时勾选状态进行变化,这个比较有趣,我们可以在CheckListBox的Itemcheck事件中实现。

代码如下:

private void clbReceivers_ItemCheck(object sender, ItemCheckEventArgs e)
 {
            //这个事件是指示某项的选中状态将要被更改、在更改前会执行这个事件
            //所以checkedListBox.CheckedItems.Count获取的是更改之前的值           
            if (e.NewValue == CheckState.Checked)
            {

                this.lbSelectedCount.Text = "已选:"+(this.clbReceivers.CheckedItems.Count + 1).ToString();

            }
            else
            {
                this.lbSelectedCount.Text = "已选:" + (this.clbReceivers.CheckedItems.Count - 1).ToString();

            }
}

实际效果如图:(因为还没有数据,为了展示效果,我先手动输入一些数据)

“邮件内容”

两个Label;

两个TextBox(一个用来显示收件人,一个用来输入标题,显示收件人我们可以将其MultiLine属性设置为True,这样可以多行显示);

一个RichTextBox(用来输入正文内容,后期我们用Html来发送文件,RichTextBox方便我们输入段落及图片);

一个Button(用来确认发送邮件)。

效果如图:

至此,我们的布局就全部完成了!

但是大家又没有发现一个问题,由于Winfrom界面缩放问题,我们生成的界面有点模糊,很难看,针对这个问题,微软有专门的解决方案。

首先右键项目=>添加新建项=>添加应用程序清单文件。

打开app.manifest文件,取消application节点注释


打开App.config文件,添加节点EnableWindowsFormsHighDpiAutoResizing,值为true

此时我们重新按F5进行编译,可以发现界面分辨率正常了,瞬间好看不少有没有。

下篇文章,我们就开始正式编码了,或许可以赶上中秋给大家拜个晚年了,哈哈哈


如果各位觉得我写的对你有那么一点点帮助,欢迎一键三连~感激不尽~

印库允许您将DevExpress .NET控件导出为各种文档格式(PDF、HTML、MHT、TXT、CSV、XLS、RTF)和图像格式(BMP、JPEG、GIF、TIFF、PNG、EMF),本文演示如何使用Print Preview窗口和代码将控件导出为PDF格式。

DevExpress Universal Subscription官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

提示:请注意,XtraPrinting 库无法将某些控件导出为特定格式,但是所有控件都可以导出为 PDF 或图像格式。

使用Print Preview窗口导出

您可以使用Print Preview窗口将可打印控件导出为可用格式。

使用控件的 ShowPrintPreview 方法显示此窗口,下图说明了网格控件的打印预览窗口。

Print Preview表单顶部的工具栏显示Export Document… 按钮,单击此按钮可显示一个下拉菜单,您可以从中选择所需的导出文件格式。

要将页面或报表标题添加到报表中,请使用可打印链接(PrintableComponentLink)生成报表。

代码导出

以下代码演示了如何使用 XtraPrinting 库方法在代码中将控件导出到 PDF 文件,而无需打印预览窗口。 控件 (XtraGrid) 通过 PrintingSystemBase.ExportToPdf方法导出为 PDF。

C#

using DevExpress.XtraPrinting;

// Create a PrintingSystem component.
DevExpress.XtraPrinting.PrintingSystem ps = new DevExpress.XtraPrinting.PrintingSystem();

// Create a link that will print a control.
DevExpress.XtraPrinting.PrintableComponentLink link = new PrintableComponentLink(ps);

// Specify the control to be printed.
link.Component = gridControl1;

// Generate a report.
link.CreateDocument();

// Export the report to a PDF file.
string filePath = @"c:\gridcontrol.pdf";
link.PrintingSystem.ExportToPdf(filePath);

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = filePath;
process.Start();

VB.NET

Imports DevExpress.XtraPrinting

' Create a PrintingSystem component.
Dim ps As New DevExpress.XtraPrinting.PrintingSystem()

' Create a link that will print a control.
Dim link As New DevExpress.XtraPrinting.PrintableComponentLink(ps)

' Specify the control to be printed.
link.Component = gridControl1

' Generate a report.
link.CreateDocument()

' Export a report to a PDF file.
Dim filePath As String = "c:\gridcontrol.pdf"
link.PrintingSystem.ExportToPdf(filePath)

Dim process As New System.Diagnostics.Process()
process.StartInfo.FileName = filePath
process.Start()

DevExpress WinForm

DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!