惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
B
Blog
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
博客园 - Franky
V
V2EX
IT之家
IT之家
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
F
Fortinet All Blogs
I
InfoQ
云风的 BLOG
云风的 BLOG
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Microsoft Security Blog
Microsoft Security Blog

博客园 - 小y

HP-Socket压力测试例子,用恐怖如斯来形容。 经典分类算法KNN的研究 用python自己回测股票策略 怎么让大模型查询本地数据库输出结果(Dify+豆包) OpenClaw工作原理解析【建议背诵】 AiAgent工具之网页搜索 怎么在百度搜索中屏蔽csdn 使用C#调用Yolo26模型的ONNX ESP32 使用MicroPython编写代码实现远程控制LED灯 使用Razor模板引擎实现自动生成代码 ESP32开发环境下载、USB驱动安装 2026年最新年会抽奖小程序 grafana+prometheus快速实现可视化大屏 PyAutoGUI库自动化测试脚本工具模拟键盘鼠标操作 性能卓越的开源时序数据库——QuestDB GitHub超 30000+ star , 超强大的开源项目Supervision 实测:MySQL跑在Docker里会损失多少性能?寻找Docker优化点 用C# GDI编写粒子效果 动画图解嵌入式常见的通讯协议:SPI、I²C、UART、红外 C#中的MVVM框架 .net 9 中的WinUI3和MAUI有什么区别 Netty的高性能之道 一文搞定理解RPC CSS flex布局(弹性布局/弹性盒子) 为什么选择使用TypeScript?这篇文章讲透了
DevExpress系列:dxValidationProvider和dxErrorProvider两种...
小y · 2025-08-22 · via 博客园 - 小y

在Devexpress中,dxValidationProvider和dxErrorProvider两个控件都可以实现输入验证,效果如下:

1110

当输入不合法时,会在控件左侧出现图标(图标可自定义三种级别:信息、警告、错误),当鼠标移上去会出现错误提示。效果就是这样。

我们原始的验证输入方式可能如:

if (string.IsNullOrWhiteSpace(txtName.Text))
{
    XtraMessageBox.Show("请输入角色名称", "验证提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    txtName.Focus();
    return false;
}

这种弹出框的方式比较传统,也一直在使用,但使用dxValidationProvider和dxErrorProvider的效果会更加优雅高级。

一、使用dxErrorProvider

当然首先需要拖一个dxErrorProvider控件到界面上,假设其名称为dxErrorProvider1

第二步即可改造之前的验证代码,

代码如下:

if (string.IsNullOrEmpty(txtname.Text.Trim()))
{
    dxErrorProvider1.SetError(txtname, "请输入账号");
}
if (txtn.EditValue==null||Convert.ToInt16(txtn.EditValue)==0)
{
    dxErrorProvider1.SetError(txtn, "请输入半径,半径应大于0");
}

二、使用dxValidationProvider

也同样首先需要拖一个dxValidationProvider控件到界面上,假设其名称为dxValidationProvider1

然后写规则代码如下:

 ConditionValidationRule notEmptyValidationRule = new ConditionValidationRule();
 notEmptyValidationRule.ConditionOperator = ConditionOperator.IsNotBlank;//验证条件
 notEmptyValidationRule.ErrorText = "此栏不能为空!";//提示信息
 notEmptyValidationRule.ErrorType = ErrorType.Warning;//错误提示类别
 dxValidationProvider1.SetValidationRule(txtcode, notEmptyValidationRule);
 ConditionValidationRule rangeValidationRule = new ConditionValidationRule();
 rangeValidationRule.ConditionOperator = ConditionOperator.Between;
 rangeValidationRule.Value1 = 50;
 rangeValidationRule.Value2 = 100;
 rangeValidationRule.ErrorText = "50 - 100 之间任意一数字!";
 rangeValidationRule.ErrorType = ErrorType.Critical;
 dxValidationProvider1.SetValidationRule(txtlen, rangeValidationRule);

第三步调用验证方法:

if (!dxValidationProvider1.Validate()) return;

三、两者区别

按本文所述的代码,使用dxValidationProvider和dxErrorProvider的效果是一样的。

区别在于dxValidationProvider需要提前设置好每一栏输入框的验证规则,验证逻辑是使用ConditionValidationRule的方式提前设好

而dxErrorProvider是每项输入框的验证规则自己写,自由度更高,比方要判断姓名是否已经存在,需要查询数据库,那么使用dxErrorProvider更合适。