WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享

  在WinForm程序中,我们有时需要对某容器内的所有控件做批量操作、如批量判断是否允许为空?批量设置为只读、批量设置为可用或不可用等常用操作,本文分享这几种方法,起抛砖引玉的作用,欢迎讨论!

 1、 清除容器控件内里面指定控件的值的方法

///<summary>///清除容器里面指定控件的值(通过控件的AccessibleName属性设置为"EmptyValue")///</summary>///<paramname="parContainer">容器控件</param>publicstaticvoidEmptyControlValue(ControlparContainer){for(intindex=0;index<parContainer.Controls.Count;index++){//如果是容器类控件,递归调用自己if(parContainer.Controls[index].HasChildren&&!parContainer.Controls[index].GetType().Name.ToLower().StartsWith("uc")){EmptyControlValue(parContainer.Controls[index]);}else{if(parContainer.Controls[index].AccessibleName==null||!parContainer.Controls[index].AccessibleName.ToLower().Contains("emptyvalue")){continue;}switch(parContainer.Controls[index].GetType().Name){case"Label":break;//case"ComboBox"://((ComboBox)(parContainer.Controls[index])).Text="";//break;case"TextBox":((TextBox)(parContainer.Controls[index])).Text="";break;case"UcTextBox":((UcTextBox)(parContainer.Controls[index])).Text="";break;case"RichTextBox":((RichTextBox)(parContainer.Controls[index])).Text="";break;case"MaskedTextBox":((MaskedTextBox)(parContainer.Controls[index])).Text="";break;case"UcMaskTextBox":((UcMaskTextBox)(parContainer.Controls[index])).Text="";break;case"RadioButton":((RadioButton)(parContainer.Controls[index])).Checked=false;break;case"CheckBox":((CheckBox)(parContainer.Controls[index])).Checked=false;break;}}}}

  

  要清空控件的值、只需调用:  

EmptyControlValue(容器控件名称); 2、断一容器控件内某控件的值是否可以为空?

///<summary>///判断一容器控件内某控件的值是否可以为空(通过控件的AccessibleName属性设置为"NotNull")///<remarks>///说明:///此方法显示提示信息,对于相应取值不能为空的控件,应设置其“Tag”属性,以友好提示信息。///</remarks>///</summary>///<paramname="parContainer">容器控件</param>publicstaticboolControlValueIsEmpty(ControlparContainer){boolreturnValue=true;stringhintInfo=string.Empty;for(intindex=0;index<parContainer.Controls.Count;index++){//如果是容器类控件,递归调用自己if(parContainer.Controls[index].HasChildren&&!parContainer.Controls[index].GetType().Name.ToLower().StartsWith("uc")){ControlValueIsEmpty(parContainer.Controls[index]);}else{if(string.IsNullOrEmpty(parContainer.Controls[index].AccessibleName)){continue;}if(!parContainer.Controls[index].AccessibleName.ToLower().Contains("notnull")&&!parContainer.Controls[index].GetType().Name.ToLower().Contains("mask")){continue;}switch(parContainer.Controls[index].GetType().Name){case"Label"://排除Labelbreak;case"ComboBox":case"ComboBoxEx":case"UcComboBoxEx":if(parContainer.Controls[index]isComboBox){if(((ComboBox)(parContainer.Controls[index])).Text.Trim()==string.Empty){hintInfo+=GetControlName((ComboBox)parContainer.Controls[index])+"\n";//ShowInfo((ComboBox)parContainer.Controls[index],"不能为空!");//((ComboBox)(parContainer.Controls[index])).Focus();returnValue=false;}}else{if(((UcComboBoxEx)(parContainer.Controls[index])).Text.Trim()==string.Empty){hintInfo+=GetControlName((UcComboBoxEx)parContainer.Controls[index])+"\n";//ShowInfo((UcComboBoxEx)parContainer.Controls[index],"不能为空!");//((UcComboBoxEx)(parContainer.Controls[index])).Focus();returnValue=false;}}break;case"TextBox":case"UcTextBox":if(parContainer.Controls[index]isTextBox){if(((TextBox)(parContainer.Controls[index])).Text.Trim()==string.Empty){hintInfo+=GetControlName((TextBox)parContainer.Controls[index])+"\n";//ShowInfo((TextBox)parContainer.Controls[index],"不能为空!");//((TextBox)(parContainer.Controls[index])).Focus();returnValue=false;}}else{if(((UcTextBox)(parContainer.Controls[index])).Text.Trim()==string.Empty){hintInfo+=GetControlName((UcTextBox)parContainer.Controls[index])+"\n";//ShowInfo((UcTextBox)parContainer.Controls[index],"不能为空!");//((UcTextBox)(parContainer.Controls[index])).Focus();returnValue=false;}}break;case"RichTextBox":if(((RichTextBox)(parContainer.Controls[index])).Text.Trim()==string.Empty){hintInfo+=GetControlName((RichTextBox)parContainer.Controls[index])+"\n";//ShowInfo((RichTextBox)parContainer.Controls[index],"不能为空!");//((RichTextBox)(parContainer.Controls[index])).Focus();returnValue=false;}break;case"MaskedTextBox":case"UcMaskTextBox":stringmskTxtValue=string.Empty;objectcontrolChinaeseName=null;if(parContainer.Controls[index]isMaskedTextBox){mskTxtValue=((MaskedTextBox)(parContainer.Controls[index])).Text;controlChinaeseName=((MaskedTextBox)(parContainer.Controls[index])).Tag??((MaskedTextBox)(parContainer.Controls[index])).Name;}else{mskTxtValue=((UcMaskTextBox)(parContainer.Controls[index])).Text;controlChinaeseName=((UcMaskTextBox)(parContainer.Controls[index])).Tag??((UcMaskTextBox)(parContainer.Controls[index])).Name;}if(mskTxtValue.Substring(0,4).Trim().Length>0)//如果有有值,则要对输入的日期进行格式判断{if(DateTimeHelper.IsDate(mskTxtValue)){//把用户输入的日期数据控制在(1754-01-01至9999-12-31这间),这主要解决SqlServer与C#日期范围的冲突if(DateTimeHelper.ToDate(mskTxtValue)<DateTimeHelper.ToDate("1754-01-01")||DateTimeHelper.ToDate(mskTxtValue)>=DateTimeHelper.ToDate("9999-12-31")){MessageBoxHelper.ShowErrorMsg("["+controlChinaeseName+"]日期范围不正确!/n正确日期范围为:1754-01-01至9999-12-31");returnValue=false;}}else{MessageBoxHelper.ShowErrorMsg("["+controlChinaeseName+"]日期格式不正确!正确格式如:2012-01-01");returnValue=false;}}else{if(mskTxtValue.Substring(0,5).Equals("-")&&parContainer.Controls[index].AccessibleName.ToLower()=="notnull"){MessageBoxHelper.ShowErrorMsg("["+controlChinaeseName+"]不能为空!");returnValue=false;}}break;default:break;}}}if(!string.IsNullOrEmpty(hintInfo.Trim())){MessageBoxHelper.ShowWarningMsg(hintInfo+"不能为空!");}returnreturnValue;}privatestaticstringGetControlName(Controlctr){if(ctr.Tag==null){returnctr.Name;}else{returnctr.Tag.ToString();}}privatestaticvoidShowInfo(Controlctr,stringinfo){if(ctr.Tag==null){MessageBoxHelper.ShowWarningMsg(ctr.Name+info);}else{MessageBoxHelper.ShowWarningMsg(ctr.Tag+info);}}

  方法“ControlValueIsEmpty”可以用于批量判断指定容器内的所有控件是否可以为空,对于不为空的可以做批量提示显示,设置如下图所示:

 3、设置容器控件中包含的控件为只读?

///<summary>///设置容器控件中包含的控件为只读(通过控件的AccessibleName属性设置为"CanReadOnly")///</summary>///<paramname="parContainer">容器控件</param>///<paramname="isReadOnly">是否为只读,true是只读,false则相反</param>>publicstaticvoidSetControlReadOnly(ControlparContainer,boolisReadOnly){for(intindex=0;index<parContainer.Controls.Count;index++){//如果是容器类控件,递归调用自己if(parContainer.Controls[index].HasChildren){SetControlReadOnly(parContainer.Controls[index],isReadOnly);}else{if(parContainer.Controls[index].AccessibleName==null&&!parContainer.Controls[index].AccessibleName.ToLower().Contains("canreadonly")){continue;}switch(parContainer.Controls[index].GetType().Name){case"TextBox":case"UcTextBox":if(parContainer.Controls[index]isTextBox){((TextBox)(parContainer.Controls[index])).ReadOnly=isReadOnly;}else{((UcTextBox)(parContainer.Controls[index])).ReadOnly=isReadOnly;}break;case"RichTextBox":((RichTextBox)(parContainer.Controls[index])).ReadOnly=isReadOnly;break;case"MaskedTextBox":case"UcMaskTextBox":if(parContainer.Controls[index]isMaskedTextBox){((MaskedTextBox)(parContainer.Controls[index])).ReadOnly=isReadOnly;}else{((UcMaskTextBox)(parContainer.Controls[index])).ReadOnly=isReadOnly;}break;case"ComboBox":((ComboBox)(parContainer.Controls[index])).Enabled=!isReadOnly;break;case"Button":case"UcButton":if(parContainer.Controls[index]isButton){((Button)(parContainer.Controls[index])).Enabled=!isReadOnly;}else{((UcButton)(parContainer.Controls[index])).Enabled=!isReadOnly;}break;default:break;}}}}

  方法“SetControlReadOnly”的使用方式与上面的方法相同,只要设置控件的“AccessibleName”属性为“CanReadOnly”即可。

 4、设置容器控件中包含的控件是否可用?

///<summary>///设置容器控件中包含的控件是否可用(通过控件的AccessibleName属性设置为"Enabled")///</summary>///<paramname="parContainer">容器控件</param>///<paramname="isEnabled">是否为用可,true:可用,false:不可用</param>>publicstaticvoidSetControlEnabled(ControlparContainer,boolisEnabled){for(intindex=0;index<parContainer.Controls.Count;index++){//如果是容器类控件,递归调用自己if(parContainer.Controls[index].HasChildren){SetControlEnabled(parContainer.Controls[index],isEnabled);}else{if(parContainer.Controls[index].AccessibleName==null&&!parContainer.Controls[index].AccessibleName.ToLower().Contains("Enabled")){continue;}//(parContainer.Controls[index]).BackColor=System.Drawing.Color.White;//设置当前控件的背景色为白色switch(parContainer.Controls[index].GetType().Name){case"Label":break;default:parContainer.Controls[index].Enabled=isEnabled;break;}}}}

  方法“SetControlEnabled”用于设置容器控件内的指定控件的Enabled属性。

  同时需要说明的时,这些方法可以同时设置,只需要设置控件的“AccessibleName”为这种类型即可:EmptyValue| NotNull |Enabled|CanReadOnly,这样设置即可,对于提示信息的显示,我们可以设置控件的Tag属性。

文章之外请关注

RDIFramework.NET官方网站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用!

欢迎关注RDIFramework.NET框架官方公众微信(微信号:rdiframework-net),及时了解最新动态。

扫描二维码立即关注