`

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

 
阅读更多

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

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

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

/// <summary>
/// 清除容器里面指定控件的值(通过控件的AccessibleName属性设置为"EmptyValue")
/// </summary>
/// <param name="parContainer">容器控件</param>
publicstaticvoidEmptyControlValue(Control parContainer)
{
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、断一容器控件内某控件的值是否可以为空?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/// <summary>
/// 判断一容器控件内某控件的值是否可以为空(通过控件的AccessibleName属性设置为"NotNull")
/// <remarks>
/// 说明:
/// 此方法显示提示信息,对于相应取值不能为空的控件,应设置其“Tag”属性,以友好提示信息。
/// </remarks>
/// </summary>
/// <param name="parContainer">容器控件</param>
publicstaticboolControlValueIsEmpty(Control parContainer)
{
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"://排除Label
break;
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(Control ctr)
{
if(ctr.Tag ==null)
{
returnctr.Name;
}
else
{
returnctr.Tag.ToString();
}
}
privatestaticvoidShowInfo(Control ctr,stringinfo)
{
if(ctr.Tag ==null)
{
MessageBoxHelper.ShowWarningMsg(ctr.Name + info);
}
else
{
MessageBoxHelper.ShowWarningMsg(ctr.Tag + info);
}
}

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/// <summary>
/// 设置容器控件中包含的控件为只读(通过控件的AccessibleName属性设置为"CanReadOnly")
/// </summary>
/// <param name="parContainer">容器控件</param>
/// <param name="isReadOnly">是否为只读,true是只读,false则相反</param>>
publicstaticvoidSetControlReadOnly(Control parContainer,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、设置容器控件中包含的控件是否可用?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
/// 设置容器控件中包含的控件是否可用(通过控件的AccessibleName属性设置为"Enabled")
/// </summary>
/// <param name="parContainer">容器控件</param>
/// <param name="isEnabled">是否为用可,true:可用,false:不可用</param>>
publicstaticvoidSetControlEnabled(Control parContainer,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属性。

作者:EricHu
出处:http://www.cnblogs.com/huyong/
Email:406590790@qq.com
QQ交流:406590790
框架官网:http://www.rdiframework.net/
框架官网博客:http://blog.rdiframework.net/
框架其他博客:http://blog.csdn.net/chinahuyong
http://www.cnblogs.com/huyong
RDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,给用户和开发者最佳的.Net框架部署方案。
关于作者:高级工程师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,在面向对象、面向服务以及数据库领域有一定的造诣。现主要从事基于RDIFramework.NET框架的技术开发、咨询工作,主要服务于金融、医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。
如有问题或建议,请多多赐教!
本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。

分享到:
评论

相关推荐

    C# 批量设置WinForm界面上的所有控件不可编辑

    本例中,为WinForm提供方法,批量设置其界面上所有的控件为不可编辑状态 方法: SetReadOnly( Control.ControlCollection , List, Boolean&gt;&gt; , List) 说明: 当窗体内的控件存在[ReadOnly]属性时,只设置...

    winform 自定义image控件

    在Winform中,自定义控件通常是从System.Windows.Forms.Control类派生的,或者从已有的控件如Button、Label等派生。这样可以继承已有控件的功能,并根据需求添加新的属性、方法和事件。在这个案例中,"bigbtn"可能是...

    WinForm可空日期控件

    在C#的Windows Forms(WinForm)开发中,经常需要使用日期选择控件(DateTimePicker)来让用户输入或选择日期。然而,在实际应用中,有时我们希望用户必须选择一个日期,不能留空。标题提到的"WinForm可空日期控件...

    C#Winform温度计控件

    总之,创建一个C# Winform温度计控件涉及到自定义控件的设计、属性定义、绘图逻辑、实时更新机制等多方面的知识。通过理解并实践这一过程,开发者可以更好地掌握Windows Forms的高级特性,并为自己的应用提供更丰富...

    winform图片轮播控件.zip

    在Windows Forms(Winform)应用开发中,图片轮播控件是一种常见的功能,它能够以动画效果展示一系列图片,常用于展示产品、演示或者作为背景显示。本项目提供的"winform图片轮播控件.zip"文件包含了一个用C#语言...

    C# WinForm实现窗体上控件自由拖动功能示例

    在Form1_Paint事件中,我们判断了rect变量是否为空,如果不为空,则绘制一个矩形,用于显示控件的拖动效果。 四、示例代码分析 在示例代码中,我们使用了多种技术来实现控件的自由拖动功能,包括: 1. 使用...

    winform自定义日历控件

    另外,我们可以为控件添加公共方法和属性,比如设置默认颜色、字体、大小等,使得在其他WinForm应用中可以灵活配置。例如,设置`SelectedDate`属性可以改变控件上显示的高亮日期,而`Events`属性则可以用来存储和...

    WinForm自定义分页控件

    你可以使用WinForm的控件如Button、Label、ComboBox等来构建这个界面。 2. **事件处理**:为控件添加事件处理器,例如“上一页”和“下一页”按钮的Click事件,当用户点击时,会触发数据源的翻页。同时,每页条数...

    C#WinForm开发:将控件背景色设置为透明

    在C# WinForm开发中,将控件的背景色设置为透明是一项常见的需求,这可以使界面设计更加灵活,用户界面也更加美观。本教程将详细讲解如何实现这一功能,以一个具体的例子——在pictureBox控件上设置label控件的背景...

    C# Winform清空界面控件值小技巧

    如果窗体里面控件,尤其是TextBox控件比较多的时候,代码里面是不是要设置每个控件的Text属性值为空呢?下面我用这个例子,来探讨下清空界面控件值的小技巧。而且还能复用。不必每个窗体都做这些枯燥、无聊的工作。 ...

    Winform自定义日历控件

    4. **可配置性**:为了让控件适应不同的需求,可以提供设置选项,如是否显示星期、是否启用特定日期等。 5. **数据绑定**:为了实现考勤、日程等功能,控件应支持与数据源的绑定,可以是数据库、XML文件或其他数据...

    winform 分页控件 DevExpress版

    总之,DevExpress的Winform分页控件为.NET开发人员提供了强大的数据展示和管理工具,通过丰富的功能和优秀的性能,简化了数据分页的实现过程。利用提供的源码实例,开发者可以快速上手并根据需求进行个性化定制。

    Winform 自定义颜色控件

    在Windows Forms(Winform)开发中...总之,创建一个Winform自定义颜色控件涉及到了控件设计、颜色管理、用户交互等多个方面。通过以上步骤,我们可以实现一个功能完备、易用的颜色选择工具,提升应用程序的用户体验。

    基于C#的WinForm中DataGridView控件操作汇总

    "基于C#的WinForm中...DataGridView控件提供了多种操作方法,包括获取当前单元格的内容、设置当前单元格、遍历单元格、设置控件的只读性等。通过正确地使用这些方法,可以提高DataGridView控件的使用效率和灵活性。

    Winform调用WPF控件

    ElementHost是Winform用来承载WPF控件的容器,它允许WPF元素在Winform窗口中运行。以下步骤展示了如何在Winform中使用WPF的DataGrid控件: 1. 引入必要的库:确保项目引用了`System.Windows.Forms`和`...

    非常好看的winform 自定义日期控件

    例如,设置日期显示格式的属性,获取或设置当前选中日期的方法。 在创建自定义日期控件的过程中,你可能会用到以下技术: - **Windows窗体控件基础知识**:理解控件的生命周期、事件模型、布局和绘制机制。 - **...

    c# winform 自定义折叠容器

    在C# WinForm开发中,有时我们希望创建一个可以折叠展开的容器控件,以便更好地组织和管理界面元素。本文将深入探讨如何实现一个自定义的折叠容器,重点关注其动画效果。 首先,折叠容器通常由两个主要部分组成:...

    Winform仪表盘控件_C#_仪表盘_winform_

    "Winform仪表盘控件"就是一种专门用于此类目的的组件,它允许开发者在C#应用程序中构建动态、交互式的仪表盘界面。这个标题暗示了我们讨论的是一个用于Winform应用的特定类型控件,该控件设计用于显示数据指标,如...

    WinForm窗体及其控件的自适应,winform控件随窗口自适应,C#

    这里可以使用递归方法遍历窗体的所有子控件,包括嵌套的容器控件,如Panel或GroupBox。以下是一个简单的例子: ```csharp private void Form1_Resize(object sender, EventArgs e) { float scaleWidth = (float)...

    WinForm页面布局 控件

    WinForm窗体本身就是一个布局容器,可以通过调整窗体属性(如AutoSizeMode、AutoScaleMode等)来控制窗体及其中控件的大小和位置。窗体还可以包含多个容器控件,实现更复杂的布局组合。 4. **面板布局(Panel)** ...

Global site tag (gtag.js) - Google Analytics