我在一个窗口中有 10 个 SpinEdit 对象,它们具有最小值和最大值。 在按钮的单击事件中,我需要检查这些对象之一是否超出范围。 目前我创建了以下函数,但我必须为每个对象单独调用它:
public bool SpinEditValueOK(decimal Value, decimal MinValue, decimal MaxValue)
{
if (Value > MinValue && Value < MaxValue) { return true; }
else { return false; }
}
是否可以执行“foreach”循环来参数化 SpinEdit 对象?
首先,您需要一种方法来迭代表单上的所有控件。这并不简单,因为控件可以嵌套,但 Form 的
Controls
集合仅包含顶级控件。
您可以使用这种递归扩展方法来迭代所有控件:
public static class WinFormsExtensions
{
public static IEnumerable<Control> Descendants(this Control parent)
{
foreach (Control c in parent.Controls) {
yield return c;
foreach (Control child in c.Descendants()) {
yield return child;
}
}
}
}
然后你可以像这样检查
SpinEdit
控件:
public bool SpinEditValuesOK()
{
return this.Descendants()
.OfType<SpinEdit>()
.All(c => c.Value >= c.MinValue && c.Value < c.MaxValue);
}
我假设此代码位于表单中,并且
this
代表表单。