ErrorProvider.Clear()的问题
我有一个问题。 我validation了两个texbox。 如果texbox未validation,则显示错误提供程序的错误消息。
情况:
tbAzetId.Text = “字符串”; tbHeslo.Text =空;
errorprovider在tbHeslo中显示错误消息,这没关系。
然后我在tbHeslo中写了一些文本,点击按钮但是errorprovider仍然在tbHeslo中显示错误信息。 哪里可以有问题?
代码在这里:
private bool IsAzetIdValid() { if (tbAzetId.Text!=String.Empty && Regex.IsMatch(tbAzetId.Text, "[^a-zA-Z0-9]")) { return true; } else { return false; } } private bool IsHesloValid() { if (tbHeslo.Text !=String.Empty) { return true; } else { return false; } } private void btnPrihlasenie_Click(object sender, EventArgs e) { errorProvider.Clear(); if (!IsAzetIdValid()) errorProvider.SetError(tbAzetId, @"Nezadali ste Azet ID"); else if (!IsHesloValid()) errorProvider.SetError(tbHeslo, @"Nezadali ste heslo"); else Text = "OK"; }
清除错误时,您需要清除该特定控件的错误提供程序文本:
errorProvider.SetError(tbAzetId, ""); if (!IsAzetIdValid()) errorProvider.SetError(tbAzetId, @"Nezadali ste Azet ID"); errorProvider.SetError(tbHelso, ""); if (!IsHesloValid()) errorProvider.SetError(tbHeslo, @"Nezadali ste heslo");;
ErrorProvider.Clear是不够的:
要清除错误消息,请调用SetError方法并为String值传入Empty。
使用errorProvider.SetError(ctlName,“”)清除控件的错误消息。
这是我的经验
errorProvider.SetError(
和
errorProvider.Clear();
将从表单中删除图标。 请注意您正在清除的ErrorProvider
实例。 以下示例有效。 但是,如果在Validating Event中移动ErrorProvider
声明,它将编译,创建错误,但不会清除它。
ErrorProvider ep = new ErrorProvider(); private void txtBox_Validating(object sender, CancelEventArgs e) { bool bValidated = double.TryParse(txtBox.Text, out txtBoxVar); if (bValidated) { ep.SetError(txtBox, String.Empty); ep.Clear(); } else { ep.SetError(txtBox, "Enter a valid decimal."); } }
我从来没有使用过errorProvider.Clear(),但我想这取决于你改变的设置(Clear()只是重置实际控件的设置而不是错误)。 我从来没想过重置我的设置。
我已经看到了诸如循环遍历每个控件并将消息设置为空的想法。
foreach (Control cr in this.Parent.Controls) { errorProvider1.SetError(cr, ""); }
但对我来说,真正有效的是,只是
errorProvider1.Dispose();
使用多个ErrorProvider对象将导致此行为。 我的解决方案是只使用一个ErrorProvider。
errorProvider.SetError(
只是将err msg设置为空字符串。 要完全摆脱错误指示器,必须调用errorProvider.Clear();
这是我validation空控件的解决方案
1-将新类添加到项目中并创建以下方法,如下所示:
public class ValidationHelper { private static ErrorProvider errProvider = new ErrorProvider(); public static void ValidateFields(List controls) { errProvider.Clear(); foreach (Control c in controls) { errProvider.SetError(c, ""); if (string.IsNullOrWhiteSpace(c.Text)) { errProvider.SetError(c, "Please fill the required field"); } } } }
2-以下是如何使用上面的课程
private void cmdSave_Click(object sender, EventArgs e) { try { List controls = new List (); controls.Add(this.txtQty); controls.Add(this.txtComment); ValidationHelper.ValidateFields(controls); //rest of your code } catch (Exception ex) { MessageBox.Show(ex.Message); } }
注意:我们需要定义/使用一个errorProvider。 谢谢