文本框验证不起作用

本文关键字:不起作用 验证 文本 | 更新日期: 2023-09-27 18:33:34

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

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的验证事件永远不会触发?

文本框验证不起作用

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

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

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

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

当接收焦点的控件将 CausesValidation 属性设置为 true 时,才会引发 Validating 事件。

例如,如果在 TextBox1Validating 事件中编写了代码,并且单击"确定"按钮 ( CausesValidation = true ),则会引发"验证"事件,但如果单击"取消"按钮 ( CausesValidation = false ),则不会引发 Validating 事件。

代码项目来源