//检查窗体中数据填写正确性的方法(类) 利用每一个控件的Tag属性,确定这个控件的数据类型,是否允许空 (个位为1表示不能为空,个位为0表示可以为空,十位数表示数据类型;参看源码)
如果改为使用正则表达式,可能更好。 //使用: try { CheckFormControls.TCheckFormControls.CheckForm_Data(Object parentControl); } catch(Exception err) { MessageBox.Show(err.Message); }
//源码 namespace CheckFormControls { public enum TKhyhDataType: int { Unknow=0, Integer=1, Float=2, String=3, Date=4, DateTime=5, Time=6, Number=7 //it only use 0-9 numbers, for example: 08688122784 } /// <summary> /// CheckFormControls /// </summary> public class TCheckFormControls { public const string SELECT_ITEM="Please select a item in \"{0}\"."; public const string COULD_NOT_EMPTY="\"{0}\" could not be empty, please check it."; public const string ERROR_IN_CONVERT="'{0}' couldn't be convert to {1}, please check your input in \"{2}\"."; public const string ERROR_INPUT="It only can be input {0}, please check your input in \"{1}\"";
private static bool ParseTypeValue(object tag, out TKhyhDataType ofDataType, out string sDataType, out bool bNeedData) { if(tag==null) { ofDataType=TKhyhDataType.Unknow; sDataType=ofDataType.ToString(); bNeedData=false; return false; } int ofTypeValue; try { ofTypeValue=Convert.ToInt32(tag.ToString()); bNeedData=((ofTypeValue%10)==1); ofTypeValue=(ofTypeValue-(ofTypeValue%10))/10;
ofDataType=(TKhyhDataType)System.Enum.Parse(typeof(TKhyhDataType),ofTypeValue.ToString()); sDataType=ofDataType.ToString(); } catch { ofDataType=TKhyhDataType.Unknow; sDataType=ofDataType.ToString(); bNeedData=false; return false; } return true; } /// <summary> /// CheckForm_Data /// </summary> /// <param name="parentSender"></param> /// It check control sort by control's TabIndex /// Data Type is by control's Tag /// Control's name is read from controls' AccessibleDescription public static void CheckForm_Data(Control parentSender) { Control obj, obj2; TKhyhDataType ofDataType; bool bNeedData; string objName; string sDataType;
ArrayList arrList=new ArrayList(); int idx; for(int i=0; i<parentSender.Controls.Count; i++) { obj=parentSender.Controls[i]; idx=arrList.Count; for(int j=0; j<arrList.Count; j++) { obj2=(Control)arrList[j]; if(obj.TabIndex<obj2.TabIndex) { idx=j; break; } } arrList.Insert(idx,obj); }
for(int i=0; i<arrList.Count; i++) { obj=(Control)arrList[i]; if(obj is Panel) { CheckForm_Data(obj); continue; }
if(!ParseTypeValue(obj.Tag,out ofDataType, out sDataType, out bNeedData)) continue;
if(obj.Tag==null) continue;
//MessageBox.Show(obj.Name.ToString()); //continue;
if(obj.AccessibleDescription==null) objName=""; else objName=obj.AccessibleDescription.ToString(); if(objName.Length==0) objName=obj.Name;
if (obj is ListBox) { ListBox lstObj=obj as ListBox; if(bNeedData && lstObj.SelectedItems.Count==0) { //lstObj.BackColor=Color.Red; throw new Exception(string.Format(SELECT_ITEM,objName)); } } else if(obj is ComboBox) { ComboBox lstObj=obj as ComboBox; if(bNeedData && lstObj.SelectedItem==null) { //lstObj.BackColor=Color.Red; throw new Exception(string.Format(SELECT_ITEM,objName)); } } else if(obj is TextBox) { TextBox textObj=obj as TextBox; string v=textObj.Text;
if(v.Length==0) { if(bNeedData) throw new Exception(string.Format(COULD_NOT_EMPTY,objName)); else continue; }
switch(ofDataType) { case TKhyhDataType.Integer: try { Convert.ToInt32(v); } catch { throw new Exception(string.Format(ERROR_IN_CONVERT,v,sDataType,objName)); } break;
case TKhyhDataType.Float: try { Convert.ToDouble(v); } catch { throw new Exception(string.Format(ERROR_IN_CONVERT,v,sDataType,objName)); } break; case TKhyhDataType.String: break; case TKhyhDataType.Date: case TKhyhDataType.DateTime: case TKhyhDataType.Time: try { Convert.ToDateTime(v); } catch { throw new Exception(string.Format(ERROR_IN_CONVERT,v,sDataType,objName)); } break; case TKhyhDataType.Number: try { Convert.ToInt32(v); } catch { throw new Exception(string.Format(ERROR_INPUT,sDataType,objName)); } break; default: break; } } } } } }

|