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属性。

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

  1. WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享

    WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享 在WinForm程序中,我们有时须要对某容器内的全部控件做批量操作.如批量推断是否同意为空?批量设置为仅仅读.批量 ...

  2. Winform禁止容器内控件获得焦点时改变容器显示范围坐标

    在Winform中当容器的可视高度无法显示所有控件并且容器的AutoScroll属性设置为True的情况下,但点击容器内某个未显示完整的控件时,会出现容器的滚动条自动下滚的情况. 这是由于控件获得焦点 ...

  3. WinForm窗体及其控件的自适应

    3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...

  4. 转:C# WinForm窗体及其控件的自适应

    一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率>  ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...

  5. C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...

  6. DevExpress winform XtraEditor常用控件

    最近在公司里面开始使用DevExpress winform的第三方控件进行开发和维护,这里整理一些常用控件的资料以便于后续查看 ComboBoxEdit 这个控件和winform自带的控件差不多,使用 ...

  7. Winform中checklistbox控件的常用方法

    Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add(" ...

  8. {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件

    在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...

  9. Atitit. .net c# web 跟客户端winform 的ui控件结构比较

    Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net   4.5 webform Winform 命名空间 System.Web.UI.WebControls ...

随机推荐

  1. JS:操作样式表1:行内样式

    //访问元素样式1, stye属性只对行内样式有用 var box = document.getElementById("box"); // alert(box.style.col ...

  2. BZOJ2400: Spoj 839 Optimal Marks

    Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其 ...

  3. osg中遇到的问题

    osg中遇到的问题 今天写程序的时候, 需要把键盘和鼠标消息转发出来, 就直接写了接口用signal丢出来了. 程序写的很多, 测试的时候却崩溃了.... 在场景中拖拽鼠标左键的时候, 会发现在扔出鼠 ...

  4. Maven with Multi-module

    Well, A project made of multi modules. For example, the hongten-security project, the structure of t ...

  5. Infragistics公司的UltraWebGrid控件在显示的时候报“theForm” 未定义错误的解决。

    在项目中使用了Infragistics公司的UltraWebGrid控件,浏览器中报错,“theForm” 未定义,并且造成客户端js,滚动条,失效.最后查官网论坛找到问题.需要把web.config ...

  6. Ajax分页js代码

    var pageIndex = 0; var pageSize = 10; $(function () { $("#btnSearch").click(function () { ...

  7. Equivalent Strings

    Equivalent Strings 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/E 题意: 给出 ...

  8. BigDecimal 转换类型

    使用BigDecimal类来进行计算的时候,主要分为以下步骤: 1.用float或者double变量构建BigDecimal对象. 2.通过调用BigDecimal的加,减,乘,除等相应的方法进行算术 ...

  9. 模拟实现ORM实例

    https://git.oschina.net/wenjieyatou/hibernate_OR_Mapping 请参考git代码.基本原理是自己写了一个session,然后用反射机制模拟数据库存储机 ...

  10. springMVC搭建

    springMVC搭建 1.Spring特点: 方便耦合,简化开发,提升性能 AOP面向切面的编程 声明式事务支持 方便程序的调试 方便集成各大优秀的框架 Java源代码学习的典范 2.Java的面向 ...