概述
我正在研究这个项目,它有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
本身,但我真的不确定它是否有可能的可能性。如果有一种简单的方法来重构这个功能,如果有人可以提供帮助,我将非常感激。
答案 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以获取错误。