System.Windows.Forms.Control不包含“GetEnumerator”公共定义?

时间:2013-11-30 13:08:45

标签: c# winforms foreach

当我想遍历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;
        }

我该怎么做才能避免这个问题?

1 个答案:

答案 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