clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 2007
-
14 juin 2007 à 16:51
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 2007
-
16 juin 2007 à 12:49
Hello,
Je cherche un moyen de savoir quel checkbox est coché dans la liste et en fonction de cela appliquer un code, je m'éxplique :
Avant je fesais ceci :
if (this.checkBox1.Checked == true)
{
//code...
}
if (this.checkBox2.Checked == true)
{
//code...
}
Comment faire avec les checkBox d'un TreeView? qui est dans mon cas treeView1? Merci d'avance!
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 14 juin 2007 à 20:16
Salut,
Tu peux utiliser la propriété Checked des TreeNode :
foreach (TreeNode node in treeView1.Nodes)
{
if (node.Checked)
{
// Faire ce qu'il faut ici...
}
}
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 14 juin 2007 à 20:49
Ok alors voilà pour les explications :
Quand tu utilises un TreeView, tu y ajoutes des noeuds. Chaque noeud peut lui-même contenir des noeuds. D'où l'analogie avec les arbres et les branches :
TreeNode node1 = new TreeNode("Première racine");
TreeNode node2 = new TreeNode("Seconde racine");
TreeNode node3 = new TreeNode("Enfant de la seconde racine");
Avec ça tu obtiens l'arbre suivant :
|-- Première racine
|--Seconde racine
|-- Enfant de la seconde racine
Pour parcourir les noeuds de premier niveau (les noeuds racine), tu parcours les noeuds de la liste treeView1.Nodes :
foreach (TreeNode node in treeView1.Nodes)
{
MessageBox.Show(node.Text);
}
ou
for (int i = 0; i < treeView1.Nodes.Length; i++)
{
MessageBox.Show(treeView1.Nodes[i].Text);
}
Ce code affiche deux boîtes de dialogue avec dedans : "Première racine" puis "Seconde racine".
Tu peux aussi accéder à chaque noeud de la manière suivante :
TreeNode premiereRacine = treeView1.Nodes[0];
TreeNode secondeRacine = treeView1.Nodes[1];
Pour obtenir les éléments de la seconde racine (c'est à dire "Enfant de la seconde racine"), tu peux utiliser le code suivant :
TreeNode enfant = secondeRacine.Nodes[0];
ou
TreeNode enfant = treeView1.Nodes[1].Nodes[0];
Pour savoir comment parcourir les noeuds enfants des noeuds enfants, etc. Je t'invite à regarder quelques cours sur la récursivité.
Maintenant, pour faire simple et pour revenir à ta question, si ton code est le suivant :
TreeNode checkNode1 = new TreeNode("Cochez moi 1");
TreeNode checkNode2 = new TreeNode("Cochez moi 2");
TreeNode checkNode3 = new TreeNode("Cochez moi 3");
treeView1.Nodes.Add(checkNode1);
treeView1.Nodes.Add(checkNode2);
treeView1.Nodes.Add(checkNode3);
Tu pourras vérifier si les cases 1, 2 et 3 sont cochées en faisant quelque part dans ton code :
if (
treeView1.Nodes[0].Checked) // Première case
{
// Ton code ici...
}
if (
treeView1.Nodes[1].Checked) // Deuxième case
{
// Ton code ici...
}
if (
treeView1.Nodes[2].Checked) // Troisième case
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 14 juin 2007 à 22:10
Hello,
Mille merci pour cet explication qui est très bien détaillé, je pense que ça ne peux pas être plus clair!
Par la même occasion, vu que vous avez l'air calé dans ce sujet, je souhaiterais savoir comment faire pour que quand on sélectionne un checkbox racine, tous ces enfants soient séléctionnés? Et que quand on séléctionne un enfant le checkbox racine se remplit d'un carré vert? J'ai vu sa sur certains installeurs de logiciels. (J'éspère être compréhensible)
J'ai cherché dans pas mal de forum et sur google ,mais je n'ai pas vraiment trouvé mon bonheur... Une idée?
Amicalement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pour le carré vert, il s'agit de l'état Indeterminate (cf. propriété CheckState des CheckBox). Mais cet état n'est pas disponible pour les cases des TreeView.
Il existe quelques implémentations de TreeView avec cases à trois états :
http://www.codeproject.com/useritems/Three_State_TreeView.asp ... il faut être anglophone
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 14 juin 2007 à 22:45
Merci tout marche à merveille!
Pour le TreeView avec cases à trois états seriez-vous prêt à m'aider pour le mettre en forme dans mon project? Car je suis loin d'être anglophone...
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 15 juin 2007 à 00:52
J'ai une deuxième question, quand est-il de l'évenement CheckedChanged? Existe-t-il pour les checkBox d'un TreeView? J'ai essayé comme ceci mais erreur de compilation...
private
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 15 juin 2007 à 08:41
Ce que tu as écris signifie juste que tu déclares une méthode qui s'appelle
treeView1.Nodes[1]_CheckedChanged.
Malheureusement, les points et les crochets ne sont pas autorisés dans les noms d'identifiants (noms de variables, de méthode, de classe, etc.)
Pour savoir si une case a été cochée, il faut intercepter l'événement AfterCheck du TreeView (et non BeforeCheck comme je l'avais suggéré précédemment : parce qu'à ce moment là, la case n'a pas encore été cochée).
Pour intercepté cet événement, il faut déclarer une méthode AfterCheck
Mais aussi dire qu'elle correspond à un événement (on aurait pu appeler cette méthode toto que ça n'y aurait rien changé ). Pour ça, soit tu le fais dans le concepteur de Forms :
- Tu cliques sur le TreeView
- Dans la fenêtre Propriétés, tu cliques sur Evenements (ça ressemble à un éclair)
- Et tu double-cliques sur "AfterCheck".
Sinon, dans le constructeur de ta Form, tu peux ajouter la ligne suivante (après InitializeComponents) :
this.treeView1.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck);
--> ça permet au TreeView de savoir que lorsqu'il déclenche l'événement AfterCheck, il faut qu'il appelle ta méthode treeView1_AfterCheck.
Pour récupérer l'élement qui vient d'être coché, utilise la propriété Node de l'objet TreeViewEventArgs qui est fournit lors de l'événement.
Et pis... s'pa dur de lire des tutos de prog en anglais : y'a une centaine de mots à connaître et la plupart sont employés en français.
Et pareils pour tous les autres... Mais la même dans l'évenement AfterCheck je ne vois vraiment pas comment faire...
Pour se qui est du treeview avec cases à trois états, je n'ai pas compris grand chose, et je pense qu'il ne faut pas tout prendre, car il y a des parties pour tout développer et tout réduire si je ne me trompe pas. (Désolé j'ai du mal à débuter...)
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 16 juin 2007 à 06:11
En fait, la fonction récursive ici est inutile. Dans le code ci-dessous, tous les enfants sont (dé)cochés puisque la propriété "Checked" changée sur chacun des Nodes redéclenche l'évenement.
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 16 juin 2007 à 06:18
Pour répondre a ta question sur le fonctionnement sur AfterCheck, tu doit le voir d'une manière différente.
En effet, quand tu faisais checkbox1.CheckedChanged, tu te servait de "sender" pour définir le checkbox, ou bien directement de "checkbox1", puisque cet évenement était déclenché par le check d'un checkbox précis.
Ici, l'évenement AfterCheck est déclenché par le (dé)cochage d'un des Nodes de ton arbre, peu importe lequel. Pour savoir de quel node il S'agit, il te suffit de te servir de l'attribut "Node" de l'objet TreeViewEventArgs .
Ainsi, "e.Node" te donnera accès au node sélectionné, tandis que "sender" te donnera accès à l'arbre complet dans lequel réside ce Node.
clubberzZ
Messages postés89Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention 3 décembre 20071 16 juin 2007 à 12:49
Hello,
Merci pour ces compléments d'informations, j'éssais d'apprendre le plus possible, pourriez-vous me faire un exemple de se que je souhaiterais faire? (car même avc ttes ces explications tout ca reste flou...)