您好,登錄后才能下訂單哦!
WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享
在WinForm程序中,我們有時需要對某容器內(nèi)的所有控件做批量操作、如批量判斷是否允許為空?批量設置為只讀、批量設置為可用或不可用等常用操作,本文分享這幾種方法,起拋磚引玉的作用,歡迎討論!
/// <summary> /// 清除容器里面指定控件的值(通過控件的AccessibleName屬性設置為"EmptyValue") /// </summary> /// <param name="parContainer">容器控件</param> public static void EmptyControlValue(Control parContainer) { for (int index = 0; index < parContainer.Controls.Count; index++) { //如果是容器類控件,遞歸調(diào)用自己 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; } } } }
要清空控件的值、只需調(diào)用:
EmptyControlValue(容器控件名稱);
/// <summary> /// 判斷一容器控件內(nèi)某控件的值是否可以為空(通過控件的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++) { //如果是容器類控件,遞歸調(diào)用自己 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)) { //把用戶輸入的日期數(shù)據(jù)控制在(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”可以用于批量判斷指定容器內(nèi)的所有控件是否可以為空,對于不為空的可以做批量提示顯示,設置如下圖所示:
/// <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++) { //如果是容器類控件,遞歸調(diào)用自己 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”即可。
/// <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++) { //如果是容器類控件,遞歸調(diào)用自己 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”用于設置容器控件內(nèi)的指定控件的Enabled屬性。
同時需要說明的時,這些方法可以同時設置,只需要設置控件的“AccessibleName”為這種類型即可:EmptyValue| NotNull |Enabled|CanReadOnly,這樣設置即可,對于提示信息的顯示,我們可以設置控件的Tag屬性。
RDIFramework.NET官方網(wǎng)站:http://www.rdiframework.net/
RDIFramework.NET官方博客:http://blog.rdiframework.net/
同時需要說明的,以后的所有技術文章以官方網(wǎng)站為準,歡迎大家收藏!
RDIFramework.NET框架由專業(yè)團隊長期打造、一直在更新、一直在升級,請放心使用!
歡迎關注RDIFramework.NET框架官方公眾微信(微信號:rdiframework-net),及時了解最新動態(tài)。
掃描二維碼立即關注
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。