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、断一容器控件内某控件的值是否可以为空?


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>

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、设置容器控件中包含的控件为只读?


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>>

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、设置容器控件中包含的控件是否可用?


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>>

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

作者: EricHu 
出处:http://www.cnblogs.com/huyong/ 
Email:[email protected] 
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 联系我,非常感谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-23 00:24:40

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

WinForm 清空界面控件值的小技巧

原文:WinForm 清空界面控件值的小技巧 在WinForm里面有时候需要清空自己输入内容或是选择的选项,以便重新操作流程,那么一般你是怎么清空界面各个控件值的呢?如果窗体里面控件,尤其是TextBox控件比较多的时候,代码里面是不是要设置每个控件的Text属性值为空呢?下面我用这个例子,来探讨下清空界面控件值的小技巧.而且还能复用.不必每个窗体都做这些枯燥.无聊的工作. 一般的做法是在清除控件的事件里面添加下面这样的代码: 代码 private void btnClear_Click(obj

WinForm窗体及其控件的自适应

3步骤: 1.在需要自适应的Form中实例化全局变量   AutoSizeFormClass.cs源码在下方 AutoSizeFormClass asc = new AutoSizeFormClass(); 2.Form_Load事件中   asc.controllInitializeSize(this); 3.Page_SizeChanged事件中 asc.controlAutoSize(this); AutoSizeFormClass.cs源码如下: class AutoSizeFormCl

VintaSoft Twain .net控件可用于桌面应用WinForm的扫描仪控件

VintaSoftTwain.NET SDK是成熟的扫描组件. 利用它, 程序员可以从.net和wpf的应用中控制的平板和ADF扫描仪,网络和数码相机和任何其他TWAIN设备. NET SDK提供的TWAIN .NET SDK 包括的两个版本:<标准版> 或 <标准+ WPF版本>. 功能特点: 完全兼容TWAIN 1.x和2.x标准规范编程环境:.NET Framework 2.0或以上, WPF 3.5 或以上.纯.NET 托管代码库,可保证在NET Framework框架下有

C#winform中使用控件的Dock属性进行布局

想要实现如下布局,可以通过设置控件的Dock属性达到效果 1.拖放一个panel控件一个label控件(放在panel中)和一个treeView控件到TestForm中 2.设置panel的Dock属性为Top(设置BorderStyle属性为FixedSingle,这样显得美观些),设置treeView的Dock属性为Fill 3.需要注意的是要先把panel放到TestForm中,先放treeView就会使得treeView填充TestForm而被后放置的panel遮盖,如下所示 4.想要实

WINFORM 自定义开关按钮控件-

本文章转载:http://www.cnblogs.com/feiyangqingyun/archive/2013/06/15/3137597.html OK,大工告成,上图演示效果. 源码下载:http://files.cnblogs.com/feiyangqingyun/myButtonCheckTest.zip WINFORM 自定义开关按钮控件-,布布扣,bubuko.com

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

Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net   4.5 webform Winform 命名空间 System.Web.UI.WebControls System.Windows.Forms 命名空间 继承层次结构 System.Object System.Web.UI.Control System.Web.UI.WebControls.WebControl System.Web.UI.WebControls.Button 继承层次结构 Syst

Winform中checklistbox控件的常用方法

Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checkedListBox1.Items.Add("黄色"); 2. 判断第i项是否选中,选中为true,否则为falseif(checkedListBox1.GetItemCh

WinForm之中BindingNavigator控件的使用

WinForm之中BindingNavigator控件的使用在微软WinForm中,BindingNavigator控件主要用来绑定数据.可以将一个数据集合与该控件绑定,以进行数据 联动的显示效果.如图下图所示: 那么,下面我们就来用BindingNavigator控件做一下上图所示的效果.分析:该案例以BindingNavigator控件为主线,我们定义一个实体类,将实体类以集合的形式显示在DataGridView中, 同时,将BindingNavigator与DataGridView绑定,将

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking&quot;的使用 (二)

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二) 编写人:CC阿爸 2015-1-29 今天我想与大家继续一起分享这一伟大的控件.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 1.    DockPanel的一点点改进: 在浏览网上的一些技术文章发现,的确有些地方还是可以进一步改进,如当双击Tab时,原先是直接把当前Tab所表示的这个窗体,从主窗体的框架上分离现来,成为一个浮动的窗体.这不是我们想要的,有些同学修改源代码,把它改成了双击关