溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享

發(fā)布時間:2020-04-29 00:08:56 來源:網(wǎng)絡 閱讀:630 作者:yonghu86 欄目:編程語言

WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享

 

  在WinForm程序中,我們有時需要對某容器內(nèi)的所有控件做批量操作、如批量判斷是否允許為空?批量設置為只讀、批量設置為可用或不可用等常用操作,本文分享這幾種方法,起拋磚引玉的作用,歡迎討論!

 1、  清除容器控件內(nèi)里面指定控件的值的方法

        /// <summary>
        /// 清除容器里面指定控件的值(通過控件的AccessibleName屬性設置為"EmptyValue")
        /// </summary>
        /// <param name="parContainer">容器控件</param>
        public static void EmptyControlValue(Control parContainer)
        {
            for (int index = 0; index < parContainer.Controls.Count; index++)
            {
                //如果是容器類控件,遞歸調(diào)用自己
                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;
                    }
                }
            }
        }

  WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享

  要清空控件的值、只需調(diào)用:  

EmptyControlValue(容器控件名稱);

 2、斷一容器控件內(nèi)某控件的值是否可以為空?

        /// <summary>
        /// 判斷一容器控件內(nèi)某控件的值是否可以為空(通過控件的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++)
            {
                //如果是容器類控件,遞歸調(diào)用自己

                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))
                                {
                                    //把用戶輸入的日期數(shù)據(jù)控制在(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”可以用于批量判斷指定容器內(nèi)的所有控件是否可以為空,對于不為空的可以做批量提示顯示,設置如下圖所示:

WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享

 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++)
            {
                //如果是容器類控件,遞歸調(diào)用自己
                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++)
            {
                //如果是容器類控件,遞歸調(diào)用自己
                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”用于設置容器控件內(nèi)的指定控件的Enabled屬性。

  同時需要說明的時,這些方法可以同時設置,只需要設置控件的“AccessibleName”為這種類型即可:EmptyValue| NotNull |Enabled|CanReadOnly,這樣設置即可,對于提示信息的顯示,我們可以設置控件的Tag屬性。

 

文章之外請關注

RDIFramework.NET官方網(wǎng)站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

      同時需要說明的,以后的所有技術文章以官方網(wǎng)站為準,歡迎大家收藏!

RDIFramework.NET框架由專業(yè)團隊長期打造、一直在更新、一直在升級,請放心使用!

歡迎關注RDIFramework.NET框架官方公眾微信(微信號:rdiframework-net),及時了解最新動態(tài)。

掃描二維碼立即關注

WinForm容器內(nèi)控件批量效驗是否允許為空?設置是否只讀?設置是否可用等方法分享


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI