cispo
Messages postés103Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention10 septembre 2007
-
6 nov. 2006 à 11:18
LUDINSKI
Messages postés441Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention22 mai 2012
-
9 nov. 2006 à 15:39
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...
LUDINSKI
Messages postés441Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention22 mai 20128 6 nov. 2006 à 13:20
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 );
}
}
}
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 6 nov. 2006 à 11:31
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 ?
cispo
Messages postés103Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention10 septembre 20073 6 nov. 2006 à 13:15
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
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 6 nov. 2006 à 15:31
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 !!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?