在Windows表單編程中,不知道大家用過控制項的Tag屬性沒有,Tag屬性代表與控制項關
聯的使用者定義資料,每個控制項都有Tag屬性,可以結合控制項Tag屬性以及Regex
進行資料合法性驗證。方法如下:
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類,在此類中實現如下
方法:
/**//// <summary>
/// 功能:判斷一個控制項中輸入資料的合法性
/// 原理:根據控制項的Tag屬性存放的資料規範來驗證資料的合法性,
所有驗證控制項的函數都是調用此函數來執行驗證。
步驟:判斷由控制項的Tag屬性判斷控制項中輸入資料的資料類型,
使用Regex匹配驗證檢查控制項Tag屬性設定是否正確,
對於應輸入字串的控制項:
判斷是否必填;
判斷是否有非法字元;
判斷字元最大最小長度;
對於應輸入字串的控制項:
是否必填;
是否有非法字元(此處必須全部為數字);
允許的最大值和最小值驗證;
小數位元驗證;
非0驗證;
對於應輸入日期的控制項:
……
/**//// </summary>
/// <param name="ctl">控制項的引用</param>
/// <returns>返回錯誤對象</returns>
a.sysError Validate(System.Windows.Forms.Control ctl)
/**//// <summary>
/// 功能:判斷一個控制項的輸入資料合法性
/// 原理:根據控制項的Tag屬性存放的資料規範來驗證資料的合法性,
/// 將錯誤返回到錯誤對象集合裡.
/// </summary>
/// <param name="ctl">控制項的引用</param>
/// <returns>錯誤集合對象</returns>
b.sysErrors ValidateControl(System.Windows.Forms.Control ctl)
public Sys.sysErrors
validateControl(System.Windows.Forms.Control ctl)
{
sysErrors errs = new sysErrors();
switch (ctl.GetType().ToString())
{
case "System.Windows.Forms.GroupBox" :
foreach(System.Windows.Forms.Control
ctlInner in ctl.Controls)
errs.MergeErrors(validateControl(ctlInner)); //遞迴
break;
case "System.Windows.Forms.Panel" :
foreach(System.Windows.Forms.Control
ctlInner in ctl.Controls)
errs.MergeErrors(validateControl(ctlInner)); //遞迴
break;
default :
Sys.sysError err = validate(ctl);
if (err != null)
errs.AddError(err);
break;
}
return errs;
}
/**//// <summary>
/// 功能:判斷一個表單上所有控制項的資料合法性
/// 原理:根據控制項的Tag屬性存放的資料規範來驗證資料的合法性,
/// 將錯誤返回到錯誤對象集合裡.
/// </summary>
c.sysErrors ValidateForm(System.Windows.Forms.Form frm)
public Sys.sysErrors validateForm(System.Windows.Forms.Form frm)
{
if(_Errors!=null) _Errors.Dispose();
_Errors =new HEWin.Sys.sysErrors();
foreach(System.Windows.Forms.Control ctl in
frm.Controls)
_Errors.MergeErrors(validateControl(ctl));
return _Errors;
}
4、在表單上要儲存資料時為控制項設定Tag屬性,要儲存資料時,先執行個體化一個sysE
rrors對象用於收集所有驗證錯誤,調用ValidateForm方法將所有出現的錯誤寫入s
ysErrors,如果sysErrors的Count屬性為0,繼續儲存資料的代碼,否則調用sysEr
rors的DisplayError方法顯示所有錯誤給使用者,還可以在為添加Validate類中添加
代碼將表單上出現第一個合法性驗證錯誤的控制項聚焦。