我有这个代码,它似乎应该可以工作,但出于某种原因它不会。
foreach(Control c in Controls.OfType<CheckBox>()) {
Check_checked += 1;
}
**检查编辑:当我单步执行代码时,Control c正在拾取所有文本框,但没有其他内容。
任何帮助将不胜感激。
**我意识到ofType不应该拾取文本/标签/水。
我得到文字/标签/水。
我将代码移动到另一台运行visual studio的计算机上。它没有拾取复选框,它似乎没有在该系统上拾取文本/标签/ watever。 所以我认为其中一个问题是我的VS是开玩笑的。现在重新安装。
答案 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);
这必须是使用此语法的形式。您必须将表单控件传递给方法才能正常工作。