在组框窗口窗体中使用 LINQ 进行复选框验证
本文关键字:LINQ 复选框 验证 窗口 窗体 | 更新日期: 2023-09-27 18:34:00
我发现可以验证 linq 是否选中了复选框。
我得到了这样的代码
btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2;
但我的情况就像我的 win 表单上有很多复选框,但我想选中我的组框中的任何复选框都被 LINQ 选中。 有可能吗,但我仍然找不到办法。 请帮我写代码。
我得到了一些有点相似的代码。 代码如下
public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control
{
bool hit = startingPoint is T;
if (hit)
{
yield return startingPoint as T;
}
foreach (var child in startingPoint.Controls.Cast<Control>())
{
foreach (var item in AllControls<T>(child))
{
yield return item;
}
}
}
var checkboxes = control.AllControls<CheckBox>();
var checkedBoxes = control.AllControls<CheckBox>().Where(c => c.Checked);
但是如何自定义此代码,它将与"我的所有"复选框所在的组框一起使用。 请指导。 另一个问题是我使用的是 C# v2.0。 谢谢
btnAgree.Enabled =
(from chkbox in groupBox1.Controls.OfType<CheckBox>()
select chkbox).Count(b => b.Checked) >= 2;
您正在检查窗体的控件。
不需要使用窗体的控件集合,可以改用 GroupBox 的控件集合:
btnAgree.Enabled = GroupBox1.Controls.OfType<CheckBox>()
.Where(chk => chk.Checked)
.Count() >= 2;
如果您需要递归(假设您的 GroupBox 中有一个面板,并且复选框已添加到面板中),我认为您的扩展方法仍然有用
改变了一点
public static IEnumerable<T> AllControls<T>(this Control startingPoint) where T : Control
{
if (startingPoint is T)
yield return startingPoint as T;
foreach (var item in startingPoint.Controls.Cast<Control>().SelectMany(AllControls<T>))
yield return item;
}
用法:
var list = groupBox1.AllControls<CheckBox>();
var listChecked = list.Where(m => m.Checked);