当我想遍历Forms控件时,此foreach
语句(foreach (Control __control in _control)
)会出错:
System.Windows.Forms.Control不包含“GetEnumerator”public 定义。所以foreach声明不可能 'System.Windows.Forms.Control'类型变量。
这是我的代码:
public DataTable addFormControlName(DataTable dt, string[] controls)
{
foreach (string controlName in controls)
{
foreach (Control _control in this.Controls)
{
if (_control.Name.ToString() == controlName)
{
if (_control.HasChildren)
{
foreach (Control __control in _control)
{
//traverse the control like 'groupBox'...
}
}
}
}
}
return dt;
}
我该怎么做才能避免这个问题?
答案 0 :(得分:5)
为了枚举foreach
循环中的某个(集合)对象,该对象应该实现IEnumerable
接口。 Control
不实现此接口。因此你在这里有错误:
foreach (Control __control in _control)
如果你想枚举_control
的孩子,你应该枚举其Controls
集合:
foreach (Control __control in _control.Controls)
还考虑使用LINQ按名称获取控件:
var controlsToUse = Controls.Cast<Control>()
.Where(c => controls.Contains(c.Name));
// do what you want