web-dev-qa-db-fra.com

Comment puis-je parcourir toutes les cases d'un formulaire?

J'ai un formulaire qui a beaucoup de cases à cocher générées dynamiquement. Au moment de l'exécution, comment puis-je parcourir chacun d'eux afin d'obtenir leur valeur et leurs ID?

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

J'utilise une méthode d'extension simple qui fonctionnera pour tout type de contrôle:

  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;
        }
     }
  }

Ensuite, vous pouvez l'utiliser comme ceci: 

var checkboxes = control.AllControls<CheckBox>();

L'utilisation de IEnumerable vous permet de choisir le mode de stockage des résultats, mais également d'utiliser linq:

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

Si c'est Windows Forms , vous pouvez essayer quelque chose comme ceci:

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

N'oubliez pas que les contrôles de conteneur peuvent contenir des enfants, vous pouvez donc également les vérifier.

11
Adriaan Stander

Comme ceci, peut-être (si c'est dans Windows Forms ):

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

Lorsqu'elles sont créées, obtenez une liste de références aux valeurs, puis vous pouvez parcourir la liste.

1
harryovers

Je sais que c'est vieux, mais c'était facile comme je peux l'imaginer.

Ajoutez simplement toutes les cases à cocher dans un List<Checkbox>; toutes les cases des cases à cocher sont dans la liste et même si elles changent dans l'interface utilisateur de la liste, elles aussi.

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
}

J'espère que cela t'aides :)

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

dans le cas où les cases à cocher sont à l'intérieur de GroupBox ou Panel, utilisez ses noms au lieu de 'myForm'

0
Andrei Karcheuski