在Windows窗体编程中,不知道大家用过控件的Tag属性没有,Tag属性代表与控件关
联的用户定义数据,每个控件都有Tag属性,可以结合控件Tag属性以及正则表达式
进行数据合法性验证。方法如下:
 
1、数据无论是什么类型,录入可以全部采用文本框录入,制定数据验证的规则:
 
Tag属性代表与控件关联的用户定义数据,此处用来一次性验证窗体上的所有文本框
控件的数据合法性。
 
TextBox控件Tag属性设置如下:
 
        I.如果TextBox中要填入的是数字,该TextBox控件的Tag属性设置格式为:
 
                1;控件名称;1;0,999;2;
 
                说明:
 
                        1 表明要填入的是数字
 
                        控件名称:可以是字段名称或者文本框前面的Label的文本
 
                        1 表明是否必填,如果不是必填则用 0
 
                        0,999 表明数字的取值范围
 
                        2 表明小数位数
 
        II.如果TextBox中要填入的是字符串,该TextBox控件的Tag属性设置格式为:
 
                2;控件名称;1;1,20;
 
                说明:
 
                        2 表明要填入的是字符串
 
                        控件名称:可以是字段名称或者文本框前面的Label的文本
 
                        1 表明是否必填,如果不是必填则用 0
 
                        1,20 表明字符串的的最小和最大长度
 
        III.如果TextBox中要填入的是日期,该TextBox控件的Tag属性设置格式为:
 
                3;控件名称;1;2000-1-1,2004-1-1;
 
                说明:
 
                        3 表明要填入的是日期
 
                        控件名称:可以是字段名称或者文本框前面的Label的文本
 
                        1 表明是否必填,如果不是必填则用 0
 
                        2000-1-1,2004-1-1 表明允许的最小日期和最大日期
 
2、实现一个集合类sysErrors(用于存放所有在控件数据合法性验证时返回的错误
),一个sysErrors类中可以包含多条sysError(一条验证控件数据合法性时产生的
错误),实现sysErrors的Merge方法(类似与DataSet的Merge方法,用于合并sysE
rrors,将两个错误集合合并到一起)3、实现一个Validate类,在此类中实现如下
方法:
WinForm窗体一次性数据合法性验证 

WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 功能:判断一个控件中输入数据的合法性
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 原理:根据控件的Tag属性存放的数据规范来验证数据的合法性,
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                         所有验证控件的函数都是调用此函数来执行验证。
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                    步骤:判断由控件的Tag属性判断控件中输入数据的数据类型,
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                         使用正则表达式匹配验证检查控件Tag属性设置是否正确,
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                         对于应输入字符串的控件:
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                判断是否必填;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                判断是否有非法字符;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                判断字符最大最小长度;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                         对于应输入字符串的控件:
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                是否必填;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                是否有非法字符(此处必须全部为数字);
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                允许的最大值和最小值验证;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                小数位数验证;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                非0验证;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        对于应输入日期的控件:
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                ……
WinForm窗体一次性数据合法性验证 

WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// <param name="ctl">控件的引用</param>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// <returns>返回错误对象</returns>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                a.sysError Validate(System.Windows.Forms.Control ctl)
WinForm窗体一次性数据合法性验证 

WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 功能:判断一个控件的输入数据合法性
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 原理:根据控件的Tag属性存放的数据规范来验证数据的合法性,
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
///      将错误返回到错误对象集合里.
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// </summary>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// <param name="ctl">控件的引用</param>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// <returns>错误集合对象</returns>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                b.sysErrors ValidateControl(System.Windows.Forms.Control ctl)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
public Sys.sysErrors
WinForm窗体一次性数据合法性验证validateControl(System.Windows.Forms.Control ctl)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证 
{
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        sysErrors errs 
= new sysErrors();
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        
switch (ctl.GetType().ToString())
WinForm窗体一次性数据合法性验证 
{
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                
case "System.Windows.Forms.GroupBox" :
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                        
foreach(System.Windows.Forms.Control
WinForm窗体一次性数据合法性验证ctlInner 
in ctl.Controls)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证errs.MergeErrors(validateControl(ctlInner));            
//递归
WinForm窗体一次性数据合法性验证
 
WinForm窗体一次性数据合法性验证                                        
break;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                
case "System.Windows.Forms.Panel" :
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                        
foreach(System.Windows.Forms.Control
WinForm窗体一次性数据合法性验证ctlInner 
in ctl.Controls)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证errs.MergeErrors(validateControl(ctlInner));            
//递归
WinForm窗体一次性数据合法性验证
 
WinForm窗体一次性数据合法性验证                                        
break;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                
default :
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                        Sys.sysError err 
= validate(ctl);
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                        
if (err != null)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                                errs.AddError(err);
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                        
break;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        }

WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        
return errs;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                }

WinForm窗体一次性数据合法性验证 

WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 功能:判断一个窗体上所有控件的数据合法性
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// 原理:根据控件的Tag属性存放的数据规范来验证数据的合法性,
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
///      将错误返回到错误对象集合里.
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
/// </summary>
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                c.sysErrors ValidateForm(System.Windows.Forms.Form frm)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                
public Sys.sysErrors validateForm(System.Windows.Forms.Form frm)
WinForm窗体一次性数据合法性验证 
{
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        
if(_Errors!=null) _Errors.Dispose();
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        _Errors 
=new HEWin.Sys.sysErrors();
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        
foreach(System.Windows.Forms.Control ctl in
WinForm窗体一次性数据合法性验证frm.Controls)
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                                _Errors.MergeErrors(validateControl(ctl));
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                        
return _Errors;
WinForm窗体一次性数据合法性验证 
WinForm窗体一次性数据合法性验证                }

 
4、在窗体上要保存数据时为控件设置Tag属性,要保存数据时,先实例化一个sysE
rrors对象用于收集所有验证错误,调用ValidateForm方法将所有出现的错误写入s
ysErrors,如果sysErrors的Count属性为0,继续保存数据的代码,否则调用sysEr
rors的DisplayError方法显示所有错误给用户,还可以在为添加Validate类中添加
代码将窗体上出现第一个合法性验证错误的控件聚焦。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2022-12-23
相关资源
相似解决方案