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。 谢谢