c# – 使用this.validateChildren()时,如何针对所有无效表单控件设置errorProvider?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用this.validateChildren()时,如何针对所有无效表单控件设置errorProvider?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2227字,纯文字阅读大概需要4分钟。
内容图文
如果我忽略了一些明显的东西,我会道歉.
问题背景
我有一个应用程序,允许用户填写表格,其内容将上传到数据库.当他们点击“上传”按钮时,必须验证表单.如果任何字段无效,将提醒用户.
现行解决方案
当用户点击按钮上传事务时,将调用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属性设置为true,因为它“切断”了其余的验证.因此,最好找到一种方法来避免在以后设置此属性或找到解决此问题的方法.但我不知道该怎么做.
>我最初的一个想法是,如果我能从每个验证事件处理程序返回一个布尔值,我可以相当容易地解决这个问题(但我怀疑,并且从那时起我已经知道,我不能这样做).我看到在事件处理程序中返回值的替代方法是传入一个可变值(例如,CancelEventArgs本身).这似乎可能是一个合适的解决方案,但我不知道我自己怎么做…
解决方法:
设置e.Cancel = true是当然的问题.所以就是不要这样做.它通常是一个相当不愉快的功能,使数据输入非常模态.一种更友好的方法是为用户提供数据输入任务的自由统治,以不一定是您设置Tab键顺序时所设想的顺序输入数据.
只需编写一个简单的辅助方法即可.例如:
private Control firstInvalidControl;
private void SetValidation(object sender, bool ok, string errMsg) {
var ctl = (Control)sender;
if (ok) errorProvider1.SetError(ctl, "");
else {
if (firstInvalidControl == null) firstInvalidControl = ctl;
errorProvider1.SetError(ctl, errMsg);
}
}
在控件的Validating事件处理程序中调用SetValidation().现在您可以非常轻松地显示所有相应的警告,并帮助用户导航到他可能需要首先处理的控件.例如:
private void OKButton_Click(object sender, EventArgs e) {
firstInvalidControl = null;
this.ValidateChildren();
if (firstInvalidControl != null) firstInvalidControl.Focus();
else {
// Data is good, use it
// ...
}
}
内容总结
以上是互联网集市为您收集整理的c# – 使用this.validateChildren()时,如何针对所有无效表单控件设置errorProvider?全部内容,希望文章能够帮你解决c# – 使用this.validateChildren()时,如何针对所有无效表单控件设置errorProvider?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。