WinForm容器內控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享
WinForm容器內控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享
在WinForm程序中,我們有時需要對某容器內的所有控件做批量操作、如批量判斷是否允許為空?批量設置為只讀、批量設置為可用或不可用等常用操作,本文分享這幾種方法,起拋磚引玉的作用,歡迎討論!
1、 清除容器控件內里面指定控件的值的方法
/// <summary>
/// 清除容器里面指定控件的值(通過控件的AccessibleName屬性設置為"EmptyValue")
/// </summary>
/// <param name="parContainer">容器控件</param>
public static void EmptyControlValue(Control parContainer)
{
for (int index = 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>
/// <param name="parContainer">容器控件</param>
public static bool ControlValueIsEmpty(Control parContainer)
{
bool returnValue = true;
string hintInfo = string.Empty;
for (int index = 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"://排除Label
break;
case "ComboBox":
case "ComboBoxEx":
case "UcComboBoxEx":
if (parContainer.Controls[index] is ComboBox)
{
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] is TextBox)
{
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":
string mskTxtValue = string.Empty;
object controlChinaeseName = null;
if (parContainer.Controls[index] is MaskedTextBox)
{
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 + "不能為空!");
}
return returnValue;
}
private static string GetControlName(Control ctr)
{
if (ctr.Tag == null)
{
return ctr.Name;
}
else
{
return ctr.Tag.ToString();
}
}
private static void ShowInfo(Control ctr, string info)
{
if (ctr.Tag == null)
{
MessageBoxHelper.ShowWarningMsg(ctr.Name + info);
}
else
{
MessageBoxHelper.ShowWarningMsg(ctr.Tag + info);
}
}
方法“ControlValueIsEmpty”可以用于批量判斷指定容器內的所有控件是否可以為空,對于不為空的可以做批量提示顯示,設置如下圖所示:

3、設置容器控件中包含的控件為只讀?
/// <summary>
/// 設置容器控件中包含的控件為只讀(通過控件的AccessibleName屬性設置為"CanReadOnly")
/// </summary>
/// <param name="parContainer">容器控件</param>
/// <param name="isReadOnly">是否為只讀,true是只讀,false則相反</param>>
public static void SetControlReadOnly(Control parContainer, bool isReadOnly)
{
for (int index = 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] is TextBox)
{
((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] is MaskedTextBox)
{
((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] is Button)
{
((Button)(parContainer.Controls[index])).Enabled = !isReadOnly;
}
else
{
((UcButton)(parContainer.Controls[index])).Enabled = !isReadOnly;
}
break;
default:
break;
}
}
}
}
方法“SetControlReadOnly”的使用方式與上面的方法相同,只要設置控件的“AccessibleName”屬性為“CanReadOnly”即可。
4、設置容器控件中包含的控件是否可用?
/// <summary>
/// 設置容器控件中包含的控件是否可用(通過控件的AccessibleName屬性設置為"Enabled")
/// </summary>
/// <param name="parContainer">容器控件</param>
/// <param name="isEnabled">是否為用可,true:可用,false:不可用</param>>
public static void SetControlEnabled(Control parContainer, bool isEnabled)
{
for (int index = 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屬性。
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣?,F主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

浙公網安備 33010602011771號