以下代码循环遍历当前表单中的所有控件,并完美地处理空值。我对它的抱怨是,它似乎遵循控件的Tab键顺序的保留,即它从最后一个控件开始,然后回到第一个控件。
foreach (Control C in this.Controls)
{
if (C.GetType() == typeof(System.Windows.Forms.TextBox))
{
if (C.Text == null || C.Text == string.Empty || C.Text == "")
{
setControlErrors(C, "This field cannot be empty, you must enter a value");
return false;
}
else
{
errorProvider1.SetError(C, "");
}
}
if (C.GetType() == typeof(System.Windows.Forms.ComboBox))
{
if(C.Text == null || C.Text == string.Empty || C.Text == "")
{
setControlErrors(C, "This field cannot be empty, you must select a value");
return false;
}
else
{
errorProvider1.SetError(C, "");
}
}
}
如何轻松扭转此订单?看到表单布局的相反顺序的验证错误似乎很奇怪。更改tab-index似乎比这更糟糕。
有更好的方法吗?
答案 0 :(得分:3)
您可以按标签索引对控件进行排序,如此
foreach (Control control in this.Controls.Cast<Control>()
.OrderBy(c => c.TabIndex))
{
//..
}
答案 1 :(得分:1)
您可以使用以下代码
var controls = this.Controls.Cast<Control>()
.OrderByDescending(x => x.TabIndex);
foreach (var control in controls)
{
}
答案 2 :(得分:0)
这个解决方案怎么样?
foreach (Control C in this.Controls.Cast<Control>().OrderBy(ctr => ctr.TabIndex))