我有两个文本框。我需要在采取任何其他行动之前验证它们。
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
的验证事件永远不会触发?
答案 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
事件。