Dol*_*hin 0 c# foreach winforms
当我想遍历一个Forms控件时,这个foreach语句(foreach (Control __control in _control))给出一个错误:
System.Windows.Forms.Control不包含"GetEnumerator"公共定义.所以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;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能避免这个问题?
为了在foreach循环中枚举一些(集合)对象,该对象应该实现IEnumerable接口.Control不要实现这个接口.因此你在这里有错误:
foreach (Control __control in _control)
Run Code Online (Sandbox Code Playgroud)
如果你想枚举你的孩子,_control你应该枚举它的Controls集合:
foreach (Control __control in _control.Controls)
Run Code Online (Sandbox Code Playgroud)
还要考虑使用LINQ来按名称获取控件:
var controlsToUse = Controls.Cast<Control>()
.Where(c => controls.Contains(c.Name));
// do what you want
Run Code Online (Sandbox Code Playgroud)