TextBox验证不起作用

时间:2012-05-09 14:39:37

标签: c# validation

我有两个文本框。我需要在采取任何其他行动之前验证它们。

private ErrorProvider _errorProviderEmail = new ErrorProvider();
private ErrorProvider _errorProviderPass = new ErrorProvider();
public FormLogin()
{
  InitializeComponent();

  textBoxEmail.Validating += TextBoxEmailValidating;
  textBoxPass.Validating += TextBoxPassValidating;

  textBoxEmail.Validated += TextBoxEmailValidated;
  textBoxPass.Validated += TextBoxPassValidated;

  textBoxEmail.Text = "";
  textBoxPass.Text = "";
}

void TextBoxPassValidated(object sender, EventArgs e)
{
  _errorProviderPass.SetError(textBoxPass, "");
}

void TextBoxEmailValidated(object sender, EventArgs e)
{
  _errorProviderEmail.SetError(textBoxEmail, "");
}

void TextBoxPassValidating(object sender, System.ComponentModel.CancelEventArgs e)
{
  if (!string.IsNullOrEmpty(textBoxPass.Text)) return;
  e.Cancel = true;
  _errorProviderPass.SetError(textBoxPass,"Password is required!");
}

void TextBoxEmailValidating(object sender, System.ComponentModel.CancelEventArgs e)
{
  if (!string.IsNullOrEmpty(textBoxEmail.Text)) return;
  e.Cancel = true;
  _errorProviderEmail.SetError(textBoxEmail, "Email address is required!");
}

问题是只触发了textBoxEmail的验证事件,这里可能出现了什么问题,以及为什么textBoxPass的验证事件永远不会触发?

2 个答案:

答案 0 :(得分:2)

单个TextBox控件仅在失去焦点时进行验证。

尝试调用表单的ValidateChildren()函数强制每个控件调用其验证处理程序:

private void button1_Click(object sender, EventArgs e) {
  if (this.ValidateChildren()) {
    this.Close();
  }
}

此外,您只需要一个ErrrorProvider组件。

答案 1 :(得分:0)

仅当接收焦点的控件将{ [boundProperty: string]: string; }属性设置为true时,才会引发img事件。

例如,如果您在Validating的{​​{1}}事件中编写了代码,并单击了确定按钮(CausesValidation),则会引发Validating事件,但是如果单击“取消”按钮(TextBox1),则不会引发Validating事件。

CodeProject

上的来源