我有一些登录类型的表单,其中我对许多文本框进行了验证。
这是Textbox
的验证码:
private void Required_Validated(object sender, EventArgs e)
{
// clear errors set by provider
this.errorProvider1.SetError((Control)sender, null);
}
private void Required_Validating(object sender, CancelEventArgs e)
{
var control = (Control)sender;
if (!string.IsNullOrEmpty(control.Text))
{
// required field is filled up
return;
}
e.Cancel = true;
// show to user an error message
this.errorProvider1.SetError(control, Resources.RequiredFieldPopup);
}
根据最终用户的要求,他们不喜欢e.Cancel = true
在TextBox.Validating
事件中产生的行为-将其设置为true会强制用户输入有效输入,并且在您固定输入内容之前,您将无法使用其他任何控件。
对于将Validated
和Validating
事件都用作其预期设计的通用验证设计,什么是理想的替代/设计修订?
答案 0 :(得分:0)
在通过单击按钮将表单字段提交到数据库或Active Directory进行身份验证之前,为什么不验证那里的字段,例如:
private void button1_Click(object sender, EventArgs e) {
bool isValid = true;
foreach( var control in this.Controls)
{
if (string.IsNullOrEmpty(control.Text))
{
isValid = false;
this.errorProvider1.SetError(control, Resources.RequiredFieldPopup);
}
}
if (!isValid) return;
}
另一种方法是使用LostFocus TextBox事件。
PS:在我的手机上输入
答案 1 :(得分:0)
我意外地找到了一种对于最终用户来说是理想方案的解决方案。它是Form.AutoValidate
属性,设置为 EnableAllowFocusChange
。我还认为 this 应该是此属性的默认值。我从事使用WinForms的开发已经很多年了,现在我才发现这一点(猜想我还不够用Google搜索)。
有关行为差异的更直观的解释,请参阅this。