Подтвердить что ты не робот

Как я могу перебирать все флажки в форме?

У меня есть форма, которая имеет много динамически генерируемых флажков. Во время выполнения, как я могу перебирать каждый из них, чтобы получить их значение и идентификаторы?

4b9b3361

Ответ 1

foreach(Control c in this.Controls)
{
   if(c is CheckBox)
   {
   // Do stuff here ;]
   }
}

Ответ 2

Я использую простой метод расширения, который будет работать для любого типа управления:

  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>();

Использование IEnumerable позволяет вам выбирать, как сохранить результаты, а также позволяет использовать linq:

var checkedBoxes = control.AllControls<CheckBox>().Where(c => c.Checked);

Ответ 3

Если это Windows Forms, вы можете попробовать что-то вроде этого:

private void button1_Click(object sender, EventArgs e)
{
    Dictionary<string, bool> checkBoxes = new Dictionary<string, bool>();
    LoopControls(checkBoxes, this.Controls);
}

private void LoopControls(Dictionary<string, bool> checkBoxes, Control.ControlCollection controls)
{
    foreach (Control control in controls)
    {
        if (control is CheckBox)
            checkBoxes.Add(control.Name, ((CheckBox) control).Checked);
        if (control.Controls.Count > 0)
            LoopControls(checkBoxes, control.Controls);
    }
}

Помните, что элементы управления контейнером могут содержать дочерние элементы, поэтому вы можете также проверить их.

Ответ 4

Подобно этому, может быть (если он находится в Windows Forms):

foreach(var checkBox in myForm.Controls.OfType<CheckBox>())
{   
   //Do something.
}

Ответ 5

Когда они создаются, получите список ссылок на значения, а затем вы можете перебирать список.

Ответ 6

Я знаю, что это старо, но это было легко, как я могу себе представить.

Просто добавьте все флажки в List<Checkbox>, все флажки состояния находятся в списке, и даже если они изменяются в пользовательском интерфейсе в списке, тоже меняется.

List<Checkbox> checkboxes = new List<Checkboxes>();
checkboxes.Add(chk1);
checkboxes.Add(chk2);
//So add all checkboxes you wanna iterate

foreach(Checkbox checkbox in checkboxes){
    //Do something using checkbox object
}

Надеюсь это поможет :)

Ответ 7

myForm.Controls.OfType<CheckBox>().ToList().ForEach(c => c...);

если флажки находятся внутри GroupBox или Panel использует их имена вместо myForm