WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享-阿里云开发者社区

开发者社区> 老朱第一> 正文

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

 



本文转自yonghu86博客园博客,原文链接:http://www.cnblogs.com/huyong/p/4717301.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
云原生生态周报 Vol. 13 | Forrester 发布企业级容器平台报告
业界要闻 近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告。其中,阿里云容器服务的市场表现全球前三、中国第一,同时创造中国企业最好成绩,进入强劲表现者象限。报告显示,阿里云容器服务市场表现为中国第一,与谷歌云并列全球第三。
1069 0
Confluence 6 影响语言的其他设置
一个独立的用户可以在 Confluence 中选择应用到界面文字和消息中的语言。请注意,支持的语言类型基于在 Confluence 中安装的语言包。
877 0
用C# Winform做一个文件名批量修改器
我是一名QA,我提bug以后有个习惯,就是将bug的jira地址保存为一个链接存在本地,如下: 每天都要手动的把日期“【XX.XX】”添加在里面,这个反复修改文件名的过程是比较枯燥的,于是我决定写一个窗体tool来实现,窗体如下: 点击选择后会跳出选择的folder路径的界面,这个地方用到了FolderBrowserDialog控件: 之后点击修改就可以修改选择的folder路径下所有的文件名了。
661 0
Winfrom巧用Using设置鼠标为WaitCursor
本文转载:http://www.cnblogs.com/LoveJenny/archive/2013/03/13/2956922.html 看到try,finally ,有没有让你想到什么呢?,对了using 可以生成try-finally public class WaitCursor...
630 0
Ubuntu 入门(2):配置 Java 环境变量 及 设置默认JDK
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/51584414 下载 官网的下载地址:Java SE Development Kit 8 Downloads 认准自己所需的版本后开始下载就好了,本文后面以“jdk-8u91-linux-x64.tar.gz”为例。
643 0
容器服务kubernetes与堡垒机按应用人员设置权限
1.前言:  aliyun 上采用容器服务 kubernetes 部署某业务的所有应用,每个应用有不同的Owner, 开发人员, 运维,需要根据应用分配不同的人访问权限。 需求: 运维人员(集群管理人员)---> 所有应用配置读写; 应用owner与运维 --> 所属应用的配置读写; 应用开发测试等人员 --> 只读访问应用的配置,并可以进入 POD 维护; 所有人员通过堡垒机运维线上系统,堡垒机审计功能记录运维人员的操作过程。
660 0
+关注
43
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载