我有例如:
Checkbox1.IsChecked = true;
Checkbox2.IsChecked = true;
Checkbox3.IsChecked = true;
我有32次。有没有办法让concat字符串?例如:
i = 1
while i < 32:
("Checkbox"+ (i)).IsChecked = true;
i++
由于
答案 0 :(得分:5)
虽然您无法完全按照预期执行操作,但您可以选中或取消选中给定容器中的所有复选框。例如,假设您有一个包含许多复选框的Panel,称为pnlChecks。你可以做点什么
foreach (var chkBox in pnlChecks.Controls.OfType<CheckBox>())
{
chkBox.IsChecked = true;
}
答案 1 :(得分:2)
有多种方法可以实现这一目标。
List<>
并按照您提到的那样进行迭代。 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();
}
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
属性绑定到所需的值并进行更改即可。您可以在互联网上的众多文章中找到更多相关信息。