Mon projet est WinForms, C#.Cocher ou décocher tous les enfants TreeViewItem
J'ai un formulaire avec TreeView avec CheckBoxes défini sur true. Il y a quelques nœuds racines ayant chacun plusieurs nœuds enfants.
Je souhaite que tous les nœuds enfants aient le même état coché/non coché que leur parent. J'ai écrit le gestionnaire d'événement suivant:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
// return in case the event is induced by the code below
if (e.Action == TreeViewAction.Unknown)
{
return;
}
System.Diagnostics.Debug.WriteLine(string.Format("Checked - {0}", e.Node.Checked));
foreach (TreeNode subNode in e.Node.Nodes)
{
subNode.Checked = e.Node.Checked;
}
}
Cependant, cela fonctionne assez étrange lorsque vous cliquez sur le parent rapidement. Je peux facilement le reproduire en cochant et décochant rapidement parent de sorte que les sous-noeuds sont tous vérifiés tandis que le parent est déjà décochée.
Comment faire cela plus correctement?
Il semble que cet événement ne soit pas appelé lorsque vous cliquez rapidement. J'ai ajouté System.Diagnostics.Debug.WriteLine (string.Format ("Checked - {0}", e.Node.Checked)); à la première ligne et ne peut pas voir "Checked - false" pour la deuxième (décocher) cliquez. – Alex
Je n'ai pu reproduire ce comportement que si j'ai neutralisé le comportement du double clic. Sinon, cliquer rapidement agrandit/contracte le nœud sur lequel vous cliquez. – msergeant
msergeant, cliquez rapidement sur la case à cocher, pas sur le texte de l'article. il ne devrait pas se développer ou s'effondrer. – Alex