单击按钮c#后选中多个复选框

时间:2015-10-27 00:08:34

标签: c#

我有例如:

Checkbox1.IsChecked = true;
Checkbox2.IsChecked = true;
Checkbox3.IsChecked = true;

我有32次。有没有办法让concat字符串?例如:

i = 1
while i < 32:
    ("Checkbox"+ (i)).IsChecked = true;
    i++

由于

2 个答案:

答案 0 :(得分:5)

虽然您无法完全按照预期执行操作,但您可以选中或取消选中给定容器中的所有复选框。例如,假设您有一个包含许多复选框的Panel,称为pnlChecks。你可以做点什么

foreach (var chkBox in pnlChecks.Controls.OfType<CheckBox>())
{
    chkBox.IsChecked = true;
}

答案 1 :(得分:2)

有多种方法可以实现这一目标。

  1. 将所有这些内容添加到通用List<>并按照您提到的那样进行迭代。
  2. 使用反射并获取复选框控件并设置其值。
  3. 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属性绑定到所需的值并进行更改即可。您可以在互联网上的众多文章中找到更多相关信息。