2009-11-04 6 views
2

J'ai une séquence de cases à cocher sur un Winform C#. Chaque case à cocher peut avoir quelques options, ce qui est juste un autre ensemble de cases à cocher qui sont juste indentées dans la page un peu. Ce que j'essaie de réaliser est que lorsque vous cochez l'une des cases parent, toutes les cases enfant sont cochées. Et le contraire quand une case à cocher parent est décochée où toutes les cases à cocher enfant sont décochées.cases à cocher hiérarchiques winform

Ensuite, je dois l'avoir de sorte que si une case à cocher enfant est cochée, elle cochée son parent, ou au moins s'assure que le parent est cochée. C'est à dire que vous ne pouvez pas avoir d'enfant sans le parent. Et si un enfant est décoché alors si tous les autres enfants sont décochés alors le parent doit être déconnecté. Je le fais avec les gestionnaires d'événements sur les cases à cocher, mais je suis parvenu au problème où la vérification d'un enfant avec le curseur vérifie par programme le parent qui vérifie par la suite tous ses enfants.

J'apprécierais beaucoup tous les conseils sur la façon de programmer cela de manière à ce qu'il n'y ait pas de problème comme celui-ci.

+0

Je suppose que vous utilisez peut-être l'événement CheckedChanged plutôt que l'événement Click, veuillez publier le code que vous utilisez. – Lazarus

Répondre

3

Quelque chose comme ça devrait fonctionner.

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Focused) 
     { 
      checkBox2.Checked = checkBox1.Checked; 
      checkBox3.Checked = checkBox1.Checked; 
      checkBox4.Checked = checkBox1.Checked; 
     } 
    } 

    private void subCheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox theCheckbox = sender as CheckBox; 
     if (theCheckbox.Focused) 
     { 
      checkBox1.Checked = checkBox2.Checked || checkBox3.Checked || checkBox4.Checked; 
     } 
    } 

Les cases à cocher 2, 3 et 4 sont toutes liées au même gestionnaire pour mon exemple.

Espérons que ça aide!


De toute évidence, cela fait quelques hypothèses comme il est juste un exemple. Je compte sur l'entrée de l'utilisateur (propriété focalisée) pour contrôler le flux. Il y a d'autres solutions, j'en suis sûr.

+0

Ah je vois donc vous ne faites que des choses si la case est cochée, évitant ainsi les chaines de contrôle avec lesquelles j'ai un problème. Brillant. Merci –

2

Vous pouvez également utiliser un contrôle treeview avec TreeView.CheckBoxes = true. De cette façon, vous avez déjà la structure hiérarchique par défaut.

+0

J'ai envisagé d'utiliser ceci mais j'ai besoin de faire des choses bizarres que je n'ai pas mentionnées ici que le TreeView ne supportera pas. Merci pour la suggestion tout de même –