VisualStudio c#foreach on复选框

时间:2016-09-10 23:19:30

标签: c#

我有这个代码,它似乎应该可以工作,但出于某种原因它不会。

foreach(Control c in Controls.OfType<CheckBox>())  {              
                Check_checked += 1;
            }

**检查编辑:当我单步执行代码时,Control c正在拾取所有文本框,但没有其他内容。

任何帮助将不胜感激。

**我意识到ofType不应该拾取文本/标签/水。

我得到文字/标签/水。

我将代码移动到另一台运行visual studio的计算机上。它没有拾取复选框,它似乎没有在该系统上拾取文本/标签/ watever。 所以我认为其中一个问题是我的VS是开玩笑的。现在重新安装。

2 个答案:

答案 0 :(得分:0)

看下面的答案

Get all controls of a specific type

代码检查控件是否为ContainerControl,然后遍历该控件的所有子项以查找类型的控件。

public static IEnumerable<T> GetControlsOfType<T>(Control root)
    where T : Control
{
    var t = root as T;
    if (t != null)
        yield return t;

    var container = root as ContainerControl;
    if (container != null)
        foreach (Control c in container.Controls)
            foreach (var i in GetControlsOfType<T>(c))
                yield return i;
}

然后你可以这样做:

foreach (var pictureBox in GetControlsOfType<CheckBox>(form)) {

}

答案 1 :(得分:0)

此代码是计算已检查表单上的复选框的简单解决方案。

    private int CountChecks(IEnumerable controls)
    {
        var result = 0;
        foreach (Control xControl in controls)
        {

            if (xControl.HasChildren) result += CountChecks(xControl.Controls);

            if (!(xControl is CheckBox)) continue;
            if (!(xControl as CheckBox).Checked) continue;
            result++;
        }
        return result;
    }

您可以这样使用它:

var howManyAreChecked = CountChecks(Controls);

这必须是使用此语法的形式。您必须将表单控件传递给方法才能正常工作。