文本框验证不起作用
本文关键字:不起作用 验证 文本 | 更新日期: 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
事件。
例如,如果在 TextBox1
的 Validating
事件中编写了代码,并且单击"确定"按钮 ( CausesValidation = true
),则会引发"验证"事件,但如果单击"取消"按钮 ( CausesValidation = false
),则不会引发 Validating
事件。
代码项目来源