WinForm表單一次性資料合法性驗證

來源:互聯網
上載者:User
在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類中添加

代碼將表單上出現第一個合法性驗證錯誤的控制項聚焦。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.