OVH Cloud OVH Cloud

checkboxes dans un treeview

7 réponses
Avatar
oSoMoN
Bonjour
Je d=E9veloppe un programme qui affiche des structures=20
arborescentes pour lesquelles on doit pouvoir s=E9lectionner=20
certains =E9l=E9ments. J'utilise donc un contr=F4le treeview=20
avec la propri=E9t=E9 checkboxes. J'ai besoin de s=E9lectionner=20
certaines cases automatiquement dans le code apr=E8s la=20
cr=E9ation des noeuds. Le code de s=E9lection est correctement=20
ex=E9cut=E9, mais juste apr=E8s, toutes les cases se=20
d=E9selectionnent !!! Je pr=E9cise que mon contr=F4le treeview=20
est contenu dans un onglet d'un contr=F4le SSTab, mais il=20
semble que =E7a n'influe pas car m=EAme sorti du SSTab, le bug=20
persiste.
Merci =E0 ceux qui pourront m'apporter une explication=20
rationnelle, l=E0 je s=E8che...

7 réponses

Avatar
François Picalausa
Hello,

Peut-on voir ton code?
J'ai essayé avec

Private Sub RandomCheck()
Randomize Timer

Dim ChildNode As Node

For Each ChildNode In TreeView1.Nodes
ChildNode.Checked = Int(Rnd * 2)
Next
End Sub

Mais je ne constate pas de décochage sauvage des checkbox?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"oSoMoN" a écrit dans le message de
news:2ac7001c467eb$d5c68830$
Bonjour
Je développe un programme qui affiche des structures
arborescentes pour lesquelles on doit pouvoir sélectionner
certains éléments. J'utilise donc un contrôle treeview
avec la propriété checkboxes. J'ai besoin de sélectionner
certaines cases automatiquement dans le code après la
création des noeuds. Le code de sélection est correctement
exécuté, mais juste après, toutes les cases se
déselectionnent !!! Je précise que mon contrôle treeview
est contenu dans un onglet d'un contrôle SSTab, mais il
semble que ça n'influe pas car même sorti du SSTab, le bug
persiste.
Merci à ceux qui pourront m'apporter une explication
rationnelle, là je sèche...


Avatar
Voici une procédure qui doit sélectionner toutes les
checkboxes de l'arbre :

Public Sub arbre_select_all(arbre As TreeView, valeur As
Boolean)
Dim i As Integer
Dim card As Integer
card = arbre.Nodes.Count
For i = 1 To card
arbre.Nodes(i).Checked = valeur
Next i
End Sub

J'appelle cette procédure depuis une autre procédure de la
manière suivante :

Dim avis As TreeView
Set avis = wiz3_resultats.trv_avis
Call arbre_select_all(avis, True)

En posant un point d'arrêt dans la boucle, je constate que
la valeur de la propriété 'checked' pour chaque 'node' est
bien à 'true', mais au sortir de la procédure toutes les
checkboxes sont dé-cochées...

Merci de t'intéresser à mon problème, si tu as une idée du
pourquoi du comment je suis preneur...


-----Message d'origine-----
Hello,

Peut-on voir ton code?
J'ai essayé avec

Private Sub RandomCheck()
Randomize Timer

Dim ChildNode As Node

For Each ChildNode In TreeView1.Nodes
ChildNode.Checked = Int(Rnd * 2)
Next
End Sub

Mais je ne constate pas de décochage sauvage des checkbox?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net


Avatar
oSoMoN
Effectivement il semble qu'en affichant la form qui
contient mes deux treeview d'abord, le bug disparaît.
Néanmoins comme je ne souhaite pas afficher le résultat
pendant l'opération de création des nodes (qui est assez
longue), j'affiche puis je cache, en utilisant le code
suivant :

Form1.Show
Form1.SSTab1.Tab = 3
Form1.TreeView1.Refresh
Form1.SSTab1.Tab = 4
Form1.TreeView2.Refresh
Form1.Hide

Ca fonctionne, mais ça n'est pas très élégant, c'est le
moins qu'on puisse dire... Est-ce un bug connu et en
instance d'être corrigé par un patch ou un futur SP, ou
bien faut-il en prendre son parti en sachant que ça ne
sera jamais corrigé?

En tous cas merci pour votre aide

oSoMoN


-----Message d'origine-----
Bonjour,

Je crois me rappeller qu'il y a effectivement un bug dans


le TreeView:
les noeuds ne sont pas cochés si le contrôle n'est pas


visible
(ce qui est le cas quand on l'initialise dans l'évenement


Load de la Form).
Il faut donc rendre le controle visible en affichant la


Form d'abord.

Pascal


Avatar
François Picalausa
Hello,

J'ai essayé de reproduire le bug que tu décris mais je n'y arrive pas...
peut-être que ça dépend de la version du contrôle?
(tests réalisés avec la version Microsoft Common Controls 6.0)

J'ai publié mon projet de test sur:
http://apisvb.europe.webmatrixhosting.net/tree.zip
Fonctionne-t-il aussi chez toi?
(remplissage aléatoire de la liste, cochage de toutes les cases)

Essaye peut-être sans l'objet intermédiaire avis
=> Call arbre_select_all(wiz3_resultats.trv_avis, True)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Pascal B." <pascbr{_AROBASE_}hotmail{_POINT_}com> a écrit dans le
message de news:
Je crois me rappeller qu'il y a effectivement un bug dans le TreeView:
les noeuds ne sont pas cochés si le contrôle n'est pas visible
wrote in message
news:2ba2601c46803$33605b80$
Voici une procédure
qui doit sélectionner toutes les
checkboxes de l'arbre :

Public Sub arbre_select_all(arbre As TreeView, valeur As
Boolean)
Dim i As Integer
Dim card As Integer
card = arbre.Nodes.Count
For i = 1 To card
arbre.Nodes(i).Checked = valeur
Next i
End Sub

J'appelle cette procédure depuis une autre procédure de la
manière suivante :

Dim avis As TreeView
Set avis = wiz3_resultats.trv_avis
Call arbre_select_all(avis, True)

En posant un point d'arrêt dans la boucle, je constate que
la valeur de la propriété 'checked' pour chaque 'node' est
bien à 'true', mais au sortir de la procédure toutes les
checkboxes sont dé-cochées...


Avatar
François Picalausa
Hello,

En faisant une recherche dans la KB, j'ai trouvé un article intéressant:
TreeView Problems with CheckBoxes
http://support.microsoft.com/default.aspx?kbid2188

Je ne suis pas sûr qu'il résolve ton problème...
Sinon les tests mentionnés dans l'autre article ont été réalisés avec
VB6SP6... peut être qu'uil s'agit d'un bug corrigé?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"oSoMoN" a écrit dans le message de
news:2a79b01c46809$3d216690$
Effectivement il semble qu'en affichant la form qui
contient mes deux treeview d'abord, le bug disparaît.
Néanmoins comme je ne souhaite pas afficher le résultat
pendant l'opération de création des nodes (qui est assez
longue), j'affiche puis je cache, en utilisant le code
suivant :

Form1.Show
Form1.SSTab1.Tab = 3
Form1.TreeView1.Refresh
Form1.SSTab1.Tab = 4
Form1.TreeView2.Refresh
Form1.Hide

Ca fonctionne, mais ça n'est pas très élégant, c'est le
moins qu'on puisse dire... Est-ce un bug connu et en
instance d'être corrigé par un patch ou un futur SP, ou
bien faut-il en prendre son parti en sachant que ça ne
sera jamais corrigé?

En tous cas merci pour votre aide

oSoMoN


-----Message d'origine-----
Bonjour,

Je crois me rappeller qu'il y a effectivement un bug dans le
TreeView: les noeuds ne sont pas cochés si le contrôle n'est pas
visible (ce qui est le cas quand on l'initialise dans l'évenement
Load de la Form). Il faut donc rendre le controle visible en
affichant la Form d'abord.

Pascal




Avatar
Pascal B.
Bonjour,

Je crois me rappeller qu'il y a effectivement un bug dans le TreeView:
les noeuds ne sont pas cochés si le contrôle n'est pas visible
(ce qui est le cas quand on l'initialise dans l'évenement Load de la Form).
Il faut donc rendre le controle visible en affichant la Form d'abord.

Pascal

wrote in message news:2ba2601c46803$33605b80$
Voici une procédure qui doit sélectionner toutes les
checkboxes de l'arbre :

Public Sub arbre_select_all(arbre As TreeView, valeur As
Boolean)
Dim i As Integer
Dim card As Integer
card = arbre.Nodes.Count
For i = 1 To card
arbre.Nodes(i).Checked = valeur
Next i
End Sub

J'appelle cette procédure depuis une autre procédure de la
manière suivante :

Dim avis As TreeView
Set avis = wiz3_resultats.trv_avis
Call arbre_select_all(avis, True)

En posant un point d'arrêt dans la boucle, je constate que
la valeur de la propriété 'checked' pour chaque 'node' est
bien à 'true', mais au sortir de la procédure toutes les
checkboxes sont dé-cochées...

Merci de t'intéresser à mon problème, si tu as une idée du
pourquoi du comment je suis preneur...


-----Message d'origine-----
Hello,

Peut-on voir ton code?
J'ai essayé avec

Private Sub RandomCheck()
Randomize Timer

Dim ChildNode As Node

For Each ChildNode In TreeView1.Nodes
ChildNode.Checked = Int(Rnd * 2)
Next
End Sub

Mais je ne constate pas de décochage sauvage des checkbox?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net


Avatar
oSoMoN
Merci pour l'info, il semble que le contrôle treeview avec
des checkboxes soit un peu instable...
J'utilise aussi VB6 SP6, donc le bug n'est pas corrigé, je
vais donc me contenter de ma solution, qui est peu
satisfaisante, mais qui a l'avantage de bien fonctionner.
Encore merci de vos conseils.

oSoMoN


-----Message d'origine-----
Hello,

En faisant une recherche dans la KB, j'ai trouvé un


article intéressant:
TreeView Problems with CheckBoxes
http://support.microsoft.com/default.aspx?kbid2188

Je ne suis pas sûr qu'il résolve ton problème...
Sinon les tests mentionnés dans l'autre article ont été


réalisés avec
VB6SP6... peut être qu'uil s'agit d'un bug corrigé?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net