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

C# 在动态变量中存储错误提供程序,c#,.net,winforms,errorprovider,C#,.net,Winforms,Errorprovider,概述 我在这个项目上工作,它有12个错误提供程序,它们都有自己独特的名称和用途。我知道我可以使用一个,但我需要确保它们都有自己的用户错误消息。 该项目是winform,我希望所有的验证都在我的save按钮上进行评估,该按钮订阅了一个click事件 我的问题 在继续使用保存功能之前,我需要能够评估是否有任何错误提供程序处于活动状态。我有下面这段代码,但它相当繁琐和冗长。我还需要向用户显示错误消息,以便它们可以指示哪些字段无效 验证方法 保存单击事件 可能的解决办法 我想通过将变量存储到动态变量中,

概述

我在这个项目上工作,它有12个错误提供程序,它们都有自己独特的名称和用途。我知道我可以使用一个,但我需要确保它们都有自己的用户错误消息。 该项目是winform,我希望所有的验证都在我的save按钮上进行评估,该按钮订阅了一个click事件

我的问题

在继续使用保存功能之前,我需要能够评估是否有任何错误提供程序处于活动状态。我有下面这段代码,但它相当繁琐和冗长。我还需要向用户显示错误消息,以便它们可以指示哪些字段无效

验证方法

保存单击事件

可能的解决办法


我想通过将变量存储到动态变量中,然后遍历错误提供程序本身,可能会将变量存储到某种类型的集合中,更可能是一个字典,但是我确实不确定这是否可能。如果有一个重构这个函数的简单方法,如果有人能帮助我,我将不胜感激

我想这会给你想要的

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以获取错误。

此处无需使用动力学。您只需将ErrorProvider对象存储在列表中即可。使用errorProviders.Anye=>e.GetErrorc.Length>0确定是否存在任何错误。

谢谢,但是我在“error=epEmail”上遇到语法错误,无法将错误提供程序的类型转换为字符串。很抱歉,但您的答案仅检查电子邮件、姓名和姓氏。如果我要为evry error prov实现这一点,它将比我现在拥有的Lycheers还要长。你能给我举个例子,因为我在你的“Any”中遇到了一个错误。我像List errorProviders=new List那样创建了它。我按如下方式填充了我的列表errorProviders.AddepSurname但是我无法让它工作。你能提供一个例子来说明你的意思吗?@Whatdoyouneedfrom me-你需要确保所有的ErrorProvider都来自同一个ErrorProvider类,即:epForName,epSurname,epPostcode等。上面的声明示例可以是var errorProviders=new List{epForeName,epSurname,epPostcode,…};然后,当您试图单独检查是否存在任何错误时—而不是epForeName.GetErrorc.Length>0 | |。。。您可以使用errorProviders.Anye=>e.GetErrorc.Length>0来替换多行。@您需要我做什么?我以为您以前没有填充过列表。你犯了什么错误?我在Any关键字上有个错误。它们都是'error provider'类的不同实例,因此它们并非都来自同一个实例。我的错误刚刚意识到没有LINQ程序集。很抱歉,这条愚蠢的评论
 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);
                }
            }
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;}