在单击按钮时选中多个复选框c#
本文关键字:复选框 单击 按钮 | 更新日期: 2023-09-27 18:19:17
我有例如:
Checkbox1.IsChecked = true;
Checkbox2.IsChecked = true;
Checkbox3.IsChecked = true;
我做了32次。有没有办法有concat字符串?例如:
i = 1
while i < 32:
("Checkbox"+ (i)).IsChecked = true;
i++
谢谢
虽然您不能完全按照您的意愿行事,但您可以选中或取消选中给定容器中的所有复选框。例如,假设您有一个面板,其中包含许多复选框,称为pnlChecks。你可以这样写
foreach (var chkBox in pnlChecks.Controls.OfType<CheckBox>())
{
chkBox.IsChecked = true;
}
有多种方法可以实现这一点。
- 将它们全部添加到通用
List<>
中,并像您提到的那样迭代它们。 - 使用反射并获得复选框控件并设置其值。
示例WinForms代码
private List<CheckBox> checkboxes = new List<CheckBox>();
public Form1()
{
InitializeComponent();
FillCheckboxes();
}
private void CheckAll()
{
foreach (var chk in checkboxes)
{
chk.Checked = true;
}
}
private void FillCheckboxes()
{
foreach (Control c in this.Controls)
{
if (c is CheckBox)
{
checkboxes.Add(c as CheckBox);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
CheckAll();
}
示例WPF代码
private List<CheckBox> checkboxes = new List<CheckBox>();
public Window1()
{
InitializeComponent();
checkboxes = FindVisualChildren<CheckBox>(main).ToList();
CheckAll();
}
private void CheckAll()
{
foreach (var chk in checkboxes)
{
chk.IsChecked = true;
}
}
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
重要提示
对于WPF,建议的方法是使用数据绑定,而不是遍历控件并手动检查/取消检查它们。只需将IsChecked
属性绑定到所需的值并更改它。您可以在互联网上的许多文章中找到更多关于这方面的信息。