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属性。
WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享的更多相关文章
- WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享
WinForm容器内控件批量效验是否同意为空?设置是否仅仅读?设置是否可用等方法分享 在WinForm程序中,我们有时须要对某容器内的全部控件做批量操作.如批量推断是否同意为空?批量设置为仅仅读.批量 ...
- Winform禁止容器内控件获得焦点时改变容器显示范围坐标
在Winform中当容器的可视高度无法显示所有控件并且容器的AutoScroll属性设置为True的情况下,但点击容器内某个未显示完整的控件时,会出现容器的滚动条自动下滚的情况. 这是由于控件获得焦点 ...
- WinForm窗体及其控件的自适应
3步骤: 1.在需要自适应的Form中实例化全局变量 AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass ...
- 转:C# WinForm窗体及其控件的自适应
一.说明 2012-11-30 曾经写过 <C# WinForm窗体及其控件自适应各种屏幕分辨率> ,其中也讲解了控件自适应的原理.近期有网友说,装在panel里面的控件,没有效果? 这 ...
- C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...
- DevExpress winform XtraEditor常用控件
最近在公司里面开始使用DevExpress winform的第三方控件进行开发和维护,这里整理一些常用控件的资料以便于后续查看 ComboBoxEdit 这个控件和winform自带的控件差不多,使用 ...
- Winform中checklistbox控件的常用方法
Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add(" ...
- {VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件
在VS2010中使用C#开发基于WinForm的ActiveX控件 常见的一些ActiveX大部分是使用VB.Delphi.C++开发,使用C#开发ActiveX要解决下面三个问题: 使.NET组件可 ...
- Atitit. .net c# web 跟客户端winform 的ui控件结构比较
Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net 4.5 webform Winform 命名空间 System.Web.UI.WebControls ...
随机推荐
- Codeforce - Travelling Salesman
After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends most of his time travelli ...
- [深入浅出WP8.1(Runtime)]应用文件的URI方案
6.2.4 应用文件的URI方案 在上文我们获取文件的方式都是通过应用程序的三个跟目录的文件夹对象来获取文件夹对象和文件对象,那么我们这一小节来讲解一种新的获取文件对象的方式,这种方式就是通过Uri地 ...
- Android studio 一个项目中添加两个module遇到的bug
1.在一个Android studio中,我添加了一个模块,然后就是各种bug 找到到R 是在module 名上面 右键 Make Module '模块名' 经过各种google 的时候发现了 htt ...
- nginx 中 PHP 调用PEAR.php遇到的问题
公司有个老项目,写了很多年了,是在apache 上面跑的,无意间,我想让它跑到nginx上,结果遇到了PEAR.php的问题,先安装pear 基本安富有就是 wget http://pear.php. ...
- 项目管理gitflow的用法(转)
在这里主要讲一下我在项目中用到的关于gitflow的用法. 公司的项目中,专门有一台用来存放版本库的服务器,路径是在默认的安装目录/opt/git/,那么在使用的时候,如果你是一个功能模块或者是一 ...
- Odoo 配置快速创建编辑按钮
对于Man2one类型的数据,我们知道,form view中总会显示出一个尾巴似的"create and edit"和一个快速创建的机制,有时候业务人员一不小心就容易创建一个新的行 ...
- [转] - hadoop中使用lzo的压缩
在hadoop中使用lzo的压缩算法可以减小数据的大小和数据的磁盘读写时间,不仅如此,lzo是基于block分块的,这样他就允许数据被分解成chunk,并行的被hadoop处理.这样的特点,就可以让l ...
- Git分布式项目管理
Git简介 Git是什么? Git和SVN一样都是一种高效的管理代码的系统. Git是目前世界上最先进的分布式版本控制系统(没有之一). 创建版本库 什么是版本库呢?版本库又名仓库,英文名 ...
- remove 清除binlog
#!/bin/bash DATACFG=/etc/my.cnf DATADIR=`awk /^datadir/ $DATACFG|awk -F"=" '{print $2}'` D ...
- chineseChess
最近学习了chineseChess的Qt实现,把一些东西总结一下: 实现功能: 1.人人对战 2.人机对战 3.网络版 一.基础性工作:(人人对战) 1.棋盘和棋子的绘制(QPinter,drawLi ...