如果我漏看了一些显而易见的东西,请谅解。
问题背景
我有一个应用程序,允许用户填写表单,表单内容将上传到数据库。当他们点击“上传”按钮时,必须验证表单。如果任何字段无效,系统会向用户发出警报。
当前解决方案
当用户点击上传交易按钮时,将调用validFormSelections()
函数。
if (!this.validateChildren())
{
// Display an error
return false;
}
else
{
return true;
}
对于每个下拉框,都会调用验证方法,例如:
cmbName_Validating(object sender, CancelEventArgs e)
{
if (/* not valid for whatever reason */)
{
errorProvider.Clear();
e.Cancel = true;
errorProvider.setError((Control)sender, /* suitable error message */)
}
else
{
errorProvider.SetError((Control)sender, "");
}
}
问题
我想要做的是,在所有不合法的字段旁边显示errorProvider
,但是目前由于在单个验证方法中设置了e.Cancel = true;
,那么(如果我的理解是正确的)一旦找到第一个无效字段,它就不会继续验证其他字段。
我如何才能调用this.validateChildren()
并仍然在所有无效字段旁边显示errorProvider
?
到目前为止研究解决方案的尝试
据我所知,我的问题在于需要将
CancelEventArgs
的Cancel
属性设置为真,因为它“截断”了其余的验证。因此,找到一种避免在稍后或找到一种绕过此问题的方法似乎是一个好主意。但我不确定该如何去做。我的其中一个最初的想法是,如果只能从每个验证事件处理程序返回
boolean
,那么我可以相当容易地解决这个问题(但我怀疑,并且已经学到,我不能这样做)。我在事件处理程序中看到了一种替代返回值的方法是传递一个可变值(例如CancelEventArgs
本身)。这似乎可能是一个合适的解决方案,但我不确定如何自己做到这一点...