我正在尝试使用错误提供程序来实现,以在继续执行之前验证我的文本框不为空。
错误提供程序适用于主窗体上的文本框,但拒绝适用于组框或选项卡控件中的任何文本框或组合框。它不检查文本框,不显示错误或等待用户为正在检查的控件输入文本/选择项目。
当然,如果我松开组框或选项卡控件,错误检查会正常工作,但我也会失去按照我的预期为应用程序使用组框和选项卡控件的好处。
我使用下面的代码来检查文本框或组合框是否为空/空。
非常感谢一些帮助,这让我几乎想把我的电脑扔出窗外。
private void button3_Click(object sender, EventArgs e)
{
//Validate the text box in the form before proceeding to store in Database
// var emptyornull = Controls.OfType<TextBox>().Where(box => box.Name.StartsWith("_")).OrderBy(box => box.TabIndex);
// var emptyornull2 = Controls.OfType<ComboBox>().Where(box => box.Name.StartsWith("_")).OrderBy(box => box.TabIndex);
var boxes = Controls.OfType<TextBox>();
foreach (var testControl in boxes)
{
if (string.IsNullOrEmpty(testControl.Text))
{
this.errorProvider1.SetError((Control)testControl, "error");
return;
}
this.errorProvider1.SetError((Control)testControl, (string)null);
}
}
这是因为您的代码不检查子控件,而只检查顶级控件。您需要递归地迭代表单的控件:
private IEnumerable<Control> GetAllControls(Control control)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAllControls(ctrl)).Concat(controls);
}
private void button1_Click(object sender, EventArgs e)
{
errorProvider1.Clear();
foreach (Control c in GetAllControls(this))
{
if (c is TextBox && string.IsNullOrEmpty(c.Text))
errorProvider1.SetError(c, "Error");
}
}
或者,Linq 方式:
errorProvider1.Clear();
GetAllControls(this).Where(c => c is TextBox && string.IsNullOrEmpty(c.Text))
.ToList()
.ForEach(c => errorProvider1.SetError(c, "Error"));
祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)