Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Treeview et cocher noeud parent [ Windows / Formulaire / Winforms / Controls ] (cispo)

lundi 6 novembre 2006 à 11:18:23 | Treeview et cocher noeud parent

cispo

Bonjour,

J'utilise un le controle TreeView. Je me suis abonné à l'évènement AfterCheck. Mon but est de pouvoir cocher le noeud parent si tous les noeufs fils sont cochés.

J'ai écris le code suivant :

if

(node.Checked) // node est un des noeufs fils

{

bool check;

foreach (TreeNode f_nodes in node.Parent.Nodes) //On récupere le noeud parent et on parcourt tous les noeufs fils

{

if (f_nodes.Tag != node.Tag) // différents de celui concerné

{

if (f_nodes.Checked)

check = true;

else

{

check = false;

break

}

}

}

if (check)

node.Parent.Checked = true;}

Malheuresement cela ne fonctionne pas et l'application quitte sans lever d'erreur...

Quelqu'un a une idée sur la question ?

Merci d'avance !

lundi 6 novembre 2006 à 11:31:46 | Re : Treeview et cocher noeud parent

fregolo52

salut,

peux-tu détailler ?
dit-nous ce qu'il se passe. A priori, ton code ne devrait pas générer d'erreur, sauf dans le cas où ton noeud courant est le seul fils, donc initialise ton bool, par sécurité.
Tu as toujours le meme résultat, quelque soit les noeuds cochés ?


lundi 6 novembre 2006 à 13:15:18 | Re : Treeview et cocher noeud parent

cispo

Après avoir initialisé le booleen check à false, j'obtiens le message d'erreur suivant :
Failed to load resources from resource file. Please check your setup

lundi 6 novembre 2006 à 13:20:48 | Re : Treeview et cocher noeud parent

LUDINSKI

Réponse acceptée !
Salut

Je peux te proposer le code suivant :

// Méthode appelée lorsque l'état d'une case à cocher de la TreeView est modifié
private void treeView_AfterCheck( object sender, TreeViewEventArgs e )
{
    // Se désabonne à l'évènement
    treeView.AfterCheck -= new TreeViewEventHandler( treeView_AfterCheck );

    // Met les noeud fils puis les noeuds parents à jour (récursivement)
    UpdateChildNodes( e.Node );
    UpdateParentNodes( e.Node );

    // Se résabonne à l'évènement
    treeView.AfterCheck += new TreeViewEventHandler( treeView_AfterCheck );
}

// Met à jour les noeuds fils d'un noeud
private void UpdateChildNodes( TreeNode parentNode )
{
    // Parcourt les noeuds fils
    foreach( TreeNode childNode in parentNode.Nodes )
    {
        // L'état de la case à cocher du fils est différent de celui du père
        if( childNode.Checked != parentNode.Checked )
        {
            // Met à jour les noeuds fils du noeud en cours
            childNode.Checked = parentNode.Checked;
            UpdateChildNodes( childNode );
        }
    }
}

// Met à jour les noeuds parents d'un noeud
private void UpdateParentNodes( TreeNode childNode )
{
    // Le noeud possède un noeud parent
    if( childNode.Parent != null )
    {
        // Récupère une valeur indiquant si tout les noeuds du même niveau sont cochés
        bool allAreChecked = true;
        foreach( TreeNode node in childNode.Parent.Nodes )
        {
            if( ! node.Checked )
            {
                allAreChecked = false;
                break;
            }
        }

        // L'état de la case à cocher du noeud parent ne correspond pas à l'état de ses fils
        if( childNode.Parent.Checked != allAreChecked )
        {
            // Met à jour le noeud parent
            childNode.Parent.Checked = allAreChecked;
            UpdateParentNodes( childNode.Parent );
        }
    }
}

Satisfait ou remboursé ;)

lundi 6 novembre 2006 à 15:31:32 | Re : Treeview et cocher noeud parent

fregolo52

ah ah, toi aussi tu as eu ce super message : Failed to load resources from resource file. Please check your setup

Ce message est un peu l'équivalent de segmentation fault, du truc du style, sous Linux. En gros, ça plante mais on ne sait pas pourquoi.
C'est quand même bizarre qu'une erreur se produise quand tu initialises une variable !!!!

lundi 6 novembre 2006 à 19:19:55 | Re : Treeview et cocher noeud parent

cispo

Merci LUDINSKI, le code fonctionne parfaitement.

Je n'ai pas cherché, mais je suppose que l'erreur que j'obtiens vient de l'abonnement/désabonnement à l'évènement...

jeudi 9 novembre 2006 à 15:39:24 | Re : Treeview et cocher noeud parent

LUDINSKI

Ben en fait...
A chaque fois que tu modifiais la propriété Checked
, l'évènement AfterCheck était déclenché.
Donc ton programme tournait en boucle et allouait chaque fois un peu plus de mémoire...

A un moment, il n'y avait plus assez de mémoire pour pouvoir initialiser une nouvelle variable et puis paf !

Voilà ;)



Cette discussion est classé dans : check, node, parent, nodes, noeud


Répondre à ce message

Sujets en rapport avec ce message

modifier noeud fichier xml [ par jesusonline ] Voila je suis coincé et j'ai pas le temps de faire de rechercher :( alors je fais appel à vou en esperant avoir une reponse :) Voici le problème j'ai probléme sélection node dans un treeview en C# [ par rifi ] J'ai créé un TreeView avec différents nodes, monprobléme et que je souhaite sélectionner un des Nodes lorsque je clique sur un bouton. mais je n'ai t ajout de controlweb dans nodes d'un treeview [ par akira3 ] bonjour,je souhaiterai ajouter dans chacun de mes treenode des controles web(textbox,dropdownlist)j'ai entendu parler d'une propriete editlabel mais e Treeview [ par romagny13 ] Bonjour Quelquun saurait il comment parser chaque node dune treeview jusqu'au node selectionné(et ne parser que les nodes appartenant au chemin Fullpa Probleme TreeView [ par Tracid83 ] Bonjour,voila j'ai un petit problème avec la gestion de ma Treeview. J'ai rajoutés des images devant les différents ligne de ma Treeview mais lorsque  [C#]treeview node image [ par medgha ] bonjour tout le monde,je dévelope en C# sous visual studio 2005 , j'utilise dans mon application un treeview que je charge à partir d'une base de donn [C#]TreeView ne pas associer à tt les nodes une image [ par medgha ] bonjour tt le monde,peut etre que ma question vous paraitra bête, mais j'ai cherché dans le forum et j'ai pas trouvé la reponse,mon problème est le su Problème pour accéder à une méthode de base à partir d'une classe dérivée [ par Stephanie79 ] Bonjour,Je suis débutante en POO et surtout en C#, donc j'espère que je vais bien m'expliquer. Voici un bout de code (je n'ai pas mis les vrais noms d Parcours récursif d'un TreeNode [ par scoubidou944 ] Je pense que cela peut aider du monde.Objectif : Obtenir le chemin complet de l'arborescence d'un TreeNode.Exemple :Ligne1_0    Ligne2_0       Ligne3 [C#] progressBar et chargement de form en même temps [ par medgha ] bonjour tout le monde,j'ai fait qlq recherches avant de poster, je développe une application en C# sous visual studio 2005et j'utilise un treview que


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.