在动态变量中存储错误提供程序

时间:2017-07-13 14:25:27

标签: c# .net winforms errorprovider

概述

我正在研究这个项目,它有12个error providers,所有项目都有自己独特的名称和目的。我知道我可以使用一个,但我需要确保他们都有自己的错误信息给用户。 该项目为winform,我希望在我的保存按钮上评估所有验证,该按钮订阅click event

我的问题

在继续保存功能之前,我需要能够评估是否有error providers个活动。我有以下代码可行,但它相当麻烦和冗长。我还需要向用户显示错误消息,以便他们可以指出哪些字段无效。

验证方法

bool IsValidIn()
            {
                foreach (Control c in panel1.Controls)
                {
                    if (c is SpellBox)
                    {
                        //SpellBox txt = (SpellBox)c;
                        if (epForeName.GetError(c).Length > 0 || epSurname.GetError(c).Length > 0 
                                                              || epPostcode.GetError(c).Length > 0
                                                              || epCountry.GetError(c).Length > 0
                                                              || epCounty.GetError(c).Length > 0
                                                              || epHouseName.GetError(c).Length > 0
                                                              || epLocality.GetError(c).Length > 0
                                                              || epStreetName.GetError(c).Length > 0
                                                              || epMobile.GetError(c).Length > 0
                                                              || epLandline.GetError(c).Length > 0
                                                              || epAlternative.GetError(c).Length > 0
                                                              || epEmail.GetError(c).Length > 0)
                        { return false; }
                    }
                }
                return true;}

保存点击事件

 public void btn_SaveDetails_Click(object sender, EventArgs e)
        {
            try
            {

                //txt_ForeName_Validated(this, e);


                if (IsValidIn())
                {

                    _IsValid = true;
                    BtnPressed = "Ok";
                    HouseName = txt_HouseName.Text;
                    HouseNumber = Convert.ToString(nud_HouseNumber.Value);
                    StreetName = txt_StreetName.Text;
                    Locality = txt_Locality.Text;
                    Town = txt_Town.Text;
                    County = txt_County.Text;
                    Country = txt_Country.Text;
                    PostCode = txt_Postcode.Text;
                    Email = txt_Email.Text;
                    Title = cmb_Title.Text;
                    BirthDate = Convert.ToString(dateTimePicker1.Text);
                    ForeName = txt_ForeName.Text;
                    SurName = txt_SurName.Text;
                    PrefContNum = cmb_PrefConNumber.Text;
                    PrefContTime = cmb_PrefConTime.Text;
                    Mobile = txt_Mobile.Text;
                    Landline = txt_LndLine.Text;
                    Alternative = txt_Alt.Text;

                    this.Close();

                }
                else
                {
                    MessageBox.Show("Errors present in form, please review!!!"); //MessageBoxButtons.YesNo) == DialogResult.Yes);
                }
            }

可能的解决方案。

我在考虑将变量存储到某种类型的集合中,而不仅仅是字典,通过将变量存储到动态变量中,然后遍历Error-providers本身,但我真的不确定它是否有可能的可能性。如果有一种简单的方法来重构这个功能,如果有人可以提供帮助,我将非常感激。

2 个答案:

答案 0 :(得分:1)

这里没有必要使用动态。您只需将ErrorProvider个对象存储在List<ErrorProvider>即可。使用errorProviders.Any(e => e.GetError(c).Length > 0)确定是否存在任何错误。

答案 1 :(得分:0)

我认为这会给你想要的东西

bool IsValidIn()
            {
                foreach (Control c in panel1.Controls)
                {
                    if (c is SpellBox)
                    {
                        //SpellBox txt = (SpellBox)c;
                        string errorStr = string.Empty;
                        if (epForeName.GetError(c).Length > 0)
                            errorStr = "epForeName";
                        else if(epSurname.GetError(c).Length > 0)
                            errorStr = "epSurname";
                        .
                        .
                        .
                        else if(epEmail.GetError(c).Length > 0)
                            errorStr = "epEmail";


                        if(errorStr != String.Empty) 
                            return false; 

                    }
                }
                return true;}

//只返回errorStr以获取错误。