je t'ai joins ma table access in piece jointe, car cela
beug toujours avec le TreeView. as-tu pu regarder le
probleme
je t'ai joins ma table access in piece jointe, car cela
beug toujours avec le TreeView. as-tu pu regarder le
probleme
je t'ai joins ma table access in piece jointe, car cela
beug toujours avec le TreeView. as-tu pu regarder le
probleme
-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)
je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OP
beug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm=2dc9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)
je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OP
beug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Salut Jean-Claude! :O)
L'algorithme varient légèrement de ce que j'en avais
"libelle" en fait), remplace le code suivant :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
End If
If (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
End If
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
'***
par :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
Else
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***
Ce qui fait qu'un seul noeud ne sera ajouter par tour ...
algorithme, je vérifie si le parent et grand-parent du
l'ajouter, sinon je les ajoute. Tu te retrouvais donc
(meme libelle) trois fois de suite.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
"JCM" a écrit dans le
news:073201c46e4f$291e9b80$
Salut ZOURY
Voila ce que je voudrais obtenir :
+- ALIMENTAIRE
| |
| +- Pain patisserie fraiche
| | |
| | +- Pain
| | +- Patisserie fraiche
| |
| +-Viandes volailles charcuterie
| | |
| | +- charcuterie conserve de viande
| +- viandes
|
+- EQUIPEMENT DE LA PERSONNE
|
+-
+-
+-
A partir des éléments joints dans le ZIP
Cordialement
Jean Claude-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
240aacb910%24a301280a%40phx.gbl
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mvps.org/vbnet/http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/
.
.
-----Message d'origine-----
Salut Jean-Claude! :O)
L'algorithme varient légèrement de ce que j'en avais
"libelle" en fait), remplace le code suivant :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
End If
If (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
End If
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
'***
par :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
Else
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***
Ce qui fait qu'un seul noeud ne sera ajouter par tour ...
algorithme, je vérifie si le parent et grand-parent du
l'ajouter, sinon je les ajoute. Tu te retrouvais donc
(meme libelle) trois fois de suite.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
"JCM" <jean-claude.mansion@wanadoo.fr> a écrit dans le
news:073201c46e4f$291e9b80$a301280a@phx.gbl...
Salut ZOURY
Voila ce que je voudrais obtenir :
+- ALIMENTAIRE
| |
| +- Pain patisserie fraiche
| | |
| | +- Pain
| | +- Patisserie fraiche
| |
| +-Viandes volailles charcuterie
| | |
| | +- charcuterie conserve de viande
| +- viandes
|
+- EQUIPEMENT DE LA PERSONNE
|
+-
+-
+-
A partir des éléments joints dans le ZIP
Cordialement
Jean Claude
-----Message d'origine-----
Salut Jean-Claude! :O)
je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OP
beug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm=2dc9a01c46a31%
240aacb910%24a301280a%40phx.gbl
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/
.
.
-----Message d'origine-----
Salut Jean-Claude! :O)
L'algorithme varient légèrement de ce que j'en avais
"libelle" en fait), remplace le code suivant :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
End If
If (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
End If
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
'***
par :
'***
If (sTypeValue > sOldTypeValue) Then
Set nodX = TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Set nodX = TreeView1.Nodes.Add(sTypeKey,
nTypeValue)
Else
Set nodX = TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***
Ce qui fait qu'un seul noeud ne sera ajouter par tour ...
algorithme, je vérifie si le parent et grand-parent du
l'ajouter, sinon je les ajoute. Tu te retrouvais donc
(meme libelle) trois fois de suite.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
"JCM" a écrit dans le
news:073201c46e4f$291e9b80$
Salut ZOURY
Voila ce que je voudrais obtenir :
+- ALIMENTAIRE
| |
| +- Pain patisserie fraiche
| | |
| | +- Pain
| | +- Patisserie fraiche
| |
| +-Viandes volailles charcuterie
| | |
| | +- charcuterie conserve de viande
| +- viandes
|
+- EQUIPEMENT DE LA PERSONNE
|
+-
+-
+-
A partir des éléments joints dans le ZIP
Cordialement
Jean Claude-----Message d'origine-----
Salut Jean-Claude! :O)je t'ai joins ma table access in piece jointe, car cela
où ça, je ne vois aucune pièce jointe ? :OPbeug toujours avec le TreeView. as-tu pu regarder le
probleme
As-tu lu ma dernière réponse concernant ton problème ?
voir :
http://groups.google.com/groups?threadm-c9a01c46a31%
240aacb910%24a301280a%40phx.gbl
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mvps.org/vbnet/http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/
.
.
> Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd, GWL_STYLE)
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
le problème c'est que
avec le message "variable objet ou variable bloc with non
définie"
n = Node.Index
While n <> Node.Root.Index
n = TreeView1.Nodes(n).Parent.Index
1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
Merci de tes réponses
> Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd, GWL_STYLE)
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
le problème c'est que
avec le message "variable objet ou variable bloc with non
définie"
n = Node.Index
While n <> Node.Root.Index
n = TreeView1.Nodes(n).Parent.Index
1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
Merci de tes réponses
> Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd, GWL_STYLE)
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
le problème c'est que
avec le message "variable objet ou variable bloc with non
définie"
n = Node.Index
While n <> Node.Root.Index
n = TreeView1.Nodes(n).Parent.Index
1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
Merci de tes réponses
> ' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
> ' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
> ' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
-----Message d'origine-----Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
"sur le bas de l'algorithme" <- tu veux dire que le
l'arbre est sélectionné ou afficher ?
si oui, c'est à dû à cette ligne :
'***
nodX.EnsureVisible ' Affiche tous les nouds
'***
EnsureVisible n'affiche pas tous les noeuds, mais rend
fonction visible dans la fenêtre du Treeview. Pour
le haut de la liste, tu n'as qu'a enlèver cette ligne.j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd,
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
Pourquoi ne pas simplement utiliser TreeView1.CheckBoxes
le problème c'est que
<snip>avec le message "variable objet ou variable bloc with
définie"
<snip>n = Node.Index
While n <> Node.Root.Index
<snip>n = TreeView1.Nodes(n).Parent.Index
Ton algorithme n'est pas correct. Tu ne peux pas te fier
noeud pour déterminer sa position dans l'arbre. L'index 3
nécessairement après le noeud ayant l'index 2... et même
tu ne pourrais prendre pour acquis que le noeud ayant
même niveau que le 2. Les Index sont assignés selon
noeuds dans l'arbre et non selon leur position dans
montre comment dans le prochain point.1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
exemple, utilise l'événement NodeCheck au lieu de
se déclenche à *chaque* clique sur Node :
'***
' coche les noeuds récursivement
Private Sub TreeView1_NodeCheck(ByVal Node As
Call CheckNode(Node, Node.Checked, True)
End Sub
Private Sub CheckNode(ByRef Node As MSComctlLib.Node,
Boolean, Optional ByRef bRecursive As Boolean)
Dim nd As MSComctlLib.Node
' on coche le noeud courant
Node.Checked = bChecked
' on vérifie s'il a des p'tits
' et si on doit s'en préoccuper
If (bRecursive And Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call CheckNode(nd, bChecked, bRecursive)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***
2- quand j'ai coché les cases concernées, à partie d'un
bouton "OK" récupérer les libellés de celles-ci
l'algorithme, seulement cette fois du commence à partir
l'arbre et tu vérifies la propriété Checked des noeuds
'***
Private Sub PrintSelectedNodesCaptionRecursive(ByRef Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
Debug.Print Node.FullPath
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecursive(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
Private Sub PrintSelectedNodesCaption(Optional ByVal Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' si Node n'est pas spécifié on
' prend le premier de l'arbre
If (Node Is Nothing) Then
' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
' été supprimé. il faut donc faire les
' nécessaire c'est un cas possible dans le
'
' en régle générale, on prend n'importe quel
' et on va chercher le FirstSibling du Root
' d'ontenir le premier noeud de l'arbre.
'
' Notes :
' FirstSibling : premier noeud d'un meme niveau
' Root : noeud le plus élévé dans le hierarchie
'
Set Node = TreeView1.Nodes(1).Root.FirstSibling
End If
' on boucle parmit les autres du niveau
Do Until Node Is Nothing
Call PrintSelectedNodesCaptionRecurse(Node)
Set Node = Node.Next ' on passe au prochain
Loop
End Sub
Private Sub Command1_Click()
Call PrintSelectedNodesCaption
End Sub
'***Merci de tes réponses
Ça me fait plaisir! :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
"sur le bas de l'algorithme" <- tu veux dire que le
l'arbre est sélectionné ou afficher ?
si oui, c'est à dû à cette ligne :
'***
nodX.EnsureVisible ' Affiche tous les nouds
'***
EnsureVisible n'affiche pas tous les noeuds, mais rend
fonction visible dans la fenêtre du Treeview. Pour
le haut de la liste, tu n'as qu'a enlèver cette ligne.
j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd,
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
Pourquoi ne pas simplement utiliser TreeView1.CheckBoxes
le problème c'est que
<snip>
avec le message "variable objet ou variable bloc with
définie"
<snip>
n = Node.Index
While n <> Node.Root.Index
<snip>
n = TreeView1.Nodes(n).Parent.Index
Ton algorithme n'est pas correct. Tu ne peux pas te fier
noeud pour déterminer sa position dans l'arbre. L'index 3
nécessairement après le noeud ayant l'index 2... et même
tu ne pourrais prendre pour acquis que le noeud ayant
même niveau que le 2. Les Index sont assignés selon
noeuds dans l'arbre et non selon leur position dans
montre comment dans le prochain point.
1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
exemple, utilise l'événement NodeCheck au lieu de
se déclenche à *chaque* clique sur Node :
'***
' coche les noeuds récursivement
Private Sub TreeView1_NodeCheck(ByVal Node As
Call CheckNode(Node, Node.Checked, True)
End Sub
Private Sub CheckNode(ByRef Node As MSComctlLib.Node,
Boolean, Optional ByRef bRecursive As Boolean)
Dim nd As MSComctlLib.Node
' on coche le noeud courant
Node.Checked = bChecked
' on vérifie s'il a des p'tits
' et si on doit s'en préoccuper
If (bRecursive And Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call CheckNode(nd, bChecked, bRecursive)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***
2- quand j'ai coché les cases concernées, à partie d'un
bouton "OK" récupérer les libellés de celles-ci
l'algorithme, seulement cette fois du commence à partir
l'arbre et tu vérifies la propriété Checked des noeuds
'***
Private Sub PrintSelectedNodesCaptionRecursive(ByRef Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
Debug.Print Node.FullPath
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecursive(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
Private Sub PrintSelectedNodesCaption(Optional ByVal Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' si Node n'est pas spécifié on
' prend le premier de l'arbre
If (Node Is Nothing) Then
' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
' été supprimé. il faut donc faire les
' nécessaire c'est un cas possible dans le
'
' en régle générale, on prend n'importe quel
' et on va chercher le FirstSibling du Root
' d'ontenir le premier noeud de l'arbre.
'
' Notes :
' FirstSibling : premier noeud d'un meme niveau
' Root : noeud le plus élévé dans le hierarchie
'
Set Node = TreeView1.Nodes(1).Root.FirstSibling
End If
' on boucle parmit les autres du niveau
Do Until Node Is Nothing
Call PrintSelectedNodesCaptionRecurse(Node)
Set Node = Node.Next ' on passe au prochain
Loop
End Sub
Private Sub Command1_Click()
Call PrintSelectedNodesCaption
End Sub
'***
Merci de tes réponses
Ça me fait plaisir! :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----Merci pour ta réponse cela fonctionne néanmoins quand je
lance l'appli, le curseur se positionne sur le bas de
l'algorithme, comment le positionner tout au début ?
"sur le bas de l'algorithme" <- tu veux dire que le
l'arbre est sélectionné ou afficher ?
si oui, c'est à dû à cette ligne :
'***
nodX.EnsureVisible ' Affiche tous les nouds
'***
EnsureVisible n'affiche pas tous les noeuds, mais rend
fonction visible dans la fenêtre du Treeview. Pour
le haut de la liste, tu n'as qu'a enlèver cette ligne.j'ai ajouté des cases à cocher :
CurStyle = GetWindowLong(TreeView1.hwnd,
Result = SetWindowLong(TreeView1.hwnd, _
GWL_STYLE, CurStyle Or TVS_CHECKBOXES)
Pourquoi ne pas simplement utiliser TreeView1.CheckBoxes
le problème c'est que
<snip>avec le message "variable objet ou variable bloc with
définie"
<snip>n = Node.Index
While n <> Node.Root.Index
<snip>n = TreeView1.Nodes(n).Parent.Index
Ton algorithme n'est pas correct. Tu ne peux pas te fier
noeud pour déterminer sa position dans l'arbre. L'index 3
nécessairement après le noeud ayant l'index 2... et même
tu ne pourrais prendre pour acquis que le noeud ayant
même niveau que le 2. Les Index sont assignés selon
noeuds dans l'arbre et non selon leur position dans
montre comment dans le prochain point.1- quand je coche un sous-type que cela coche
automatiquement les sous-sous-types de ce type, est-ce
possible ?
exemple, utilise l'événement NodeCheck au lieu de
se déclenche à *chaque* clique sur Node :
'***
' coche les noeuds récursivement
Private Sub TreeView1_NodeCheck(ByVal Node As
Call CheckNode(Node, Node.Checked, True)
End Sub
Private Sub CheckNode(ByRef Node As MSComctlLib.Node,
Boolean, Optional ByRef bRecursive As Boolean)
Dim nd As MSComctlLib.Node
' on coche le noeud courant
Node.Checked = bChecked
' on vérifie s'il a des p'tits
' et si on doit s'en préoccuper
If (bRecursive And Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call CheckNode(nd, bChecked, bRecursive)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***
2- quand j'ai coché les cases concernées, à partie d'un
bouton "OK" récupérer les libellés de celles-ci
l'algorithme, seulement cette fois du commence à partir
l'arbre et tu vérifies la propriété Checked des noeuds
'***
Private Sub PrintSelectedNodesCaptionRecursive(ByRef Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
Debug.Print Node.FullPath
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecursive(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
Private Sub PrintSelectedNodesCaption(Optional ByVal Node
MSComctlLib.Node)
Dim nd As MSComctlLib.Node
' si Node n'est pas spécifié on
' prend le premier de l'arbre
If (Node Is Nothing) Then
' Note que selon le code impliqué,
' rien ne garantit que Nodes(0)
' existe dans un treeview car il a peut-être
' été supprimé. il faut donc faire les
' nécessaire c'est un cas possible dans le
'
' en régle générale, on prend n'importe quel
' et on va chercher le FirstSibling du Root
' d'ontenir le premier noeud de l'arbre.
'
' Notes :
' FirstSibling : premier noeud d'un meme niveau
' Root : noeud le plus élévé dans le hierarchie
'
Set Node = TreeView1.Nodes(1).Root.FirstSibling
End If
' on boucle parmit les autres du niveau
Do Until Node Is Nothing
Call PrintSelectedNodesCaptionRecurse(Node)
Set Node = Node.Next ' on passe au prochain
Loop
End Sub
Private Sub Command1_Click()
Call PrintSelectedNodesCaption
End Sub
'***Merci de tes réponses
Ça me fait plaisir! :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement sur
le OK de la msgBox pour avoir le résultat
En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
LE TOP pour mon appli, ce serait que je puisses également
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access) de
la dépense correspondant au type, sous-type,...
si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement sur
le OK de la msgBox pour avoir le résultat
En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
LE TOP pour mon appli, ce serait que je puisses également
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access) de
la dépense correspondant au type, sous-type,...
si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement sur
le OK de la msgBox pour avoir le résultat
En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
LE TOP pour mon appli, ce serait que je puisses également
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access) de
la dépense correspondant au type, sous-type,...
-----Message d'origine-----
reBonjour! :O)si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Regarde du côté de la propriété Expanded d'un noeud. Si,
voulais déployer tous les noeuds du premier niveau, tu
légèrement la partie de code servant à remplir le
noeuds dès leur ajoût au TreeView :
'***
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Call TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue)
Else
Call TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement
le OK de la msgBox pour avoir le résultat
Si tu as VB 6, Debug.Print envoi la chaine de caractère
exécution" (Ctrl-G).
Si tu as VB 5, tu peux envoyer la chaine directement sur
meme dans un picturebox créer à cet effet), comme ceci :
'***
' on met ceci dans le form_load
Me.AutoRedraw = True
' et on écrit comme ceci
Me.Print Node.FullPath
'***En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
Tu pourrais stocker le ID réel de l'enregistrement dans
chaque noeud :
'***
Dim nd As MSComctlLib.Node
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
Set nd = TreeView1.Nodes.Add(, , sTypeKey,
nd.Expanded = True
nd.Tag = sValue ' sValue contient IDdepense
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue).Tag = sValue
Else
TreeView1.Nodes.Add(sSousTypeKey, tvwChild,
nTypeValue).Tag = sValue
End If
'***
Ensuite tu peux faire un fonction (ou modifier
et PrintSelectedNodesCaptionRecurse()) afin de faire
l'autre table..
quelque chose comme :
'***
Private Sub TransfertRecord(ByRef sIDdepense As String)
' code pour transferré l'emregistrement ici
End Sub
Private Sub PrintSelectedNodesCaptionRecurse(ByRef Node
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
' on suppose que la table existe déjà..
Call TransfertRecord(Node.Tag)
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecurse(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***LE TOP pour mon appli, ce serait que je puisses
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access)
la dépense correspondant au type, sous-type,...
Et si tu l'affichais à la suite du nom du nom du noeud ?
ajouter le champs dans ton "select" et à concaténer le
création du nom ...
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
reBonjour! :O)
si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Regarde du côté de la propriété Expanded d'un noeud. Si,
voulais déployer tous les noeuds du premier niveau, tu
légèrement la partie de code servant à remplir le
noeuds dès leur ajoût au TreeView :
'***
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Call TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue)
Else
Call TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***
Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement
le OK de la msgBox pour avoir le résultat
Si tu as VB 6, Debug.Print envoi la chaine de caractère
exécution" (Ctrl-G).
Si tu as VB 5, tu peux envoyer la chaine directement sur
meme dans un picturebox créer à cet effet), comme ceci :
'***
' on met ceci dans le form_load
Me.AutoRedraw = True
' et on écrit comme ceci
Me.Print Node.FullPath
'***
En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
Tu pourrais stocker le ID réel de l'enregistrement dans
chaque noeud :
'***
Dim nd As MSComctlLib.Node
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
Set nd = TreeView1.Nodes.Add(, , sTypeKey,
nd.Expanded = True
nd.Tag = sValue ' sValue contient IDdepense
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue).Tag = sValue
Else
TreeView1.Nodes.Add(sSousTypeKey, tvwChild,
nTypeValue).Tag = sValue
End If
'***
Ensuite tu peux faire un fonction (ou modifier
et PrintSelectedNodesCaptionRecurse()) afin de faire
l'autre table..
quelque chose comme :
'***
Private Sub TransfertRecord(ByRef sIDdepense As String)
' code pour transferré l'emregistrement ici
End Sub
Private Sub PrintSelectedNodesCaptionRecurse(ByRef Node
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
' on suppose que la table existe déjà..
Call TransfertRecord(Node.Tag)
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecurse(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***
LE TOP pour mon appli, ce serait que je puisses
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access)
la dépense correspondant au type, sous-type,...
Et si tu l'affichais à la suite du nom du nom du noeud ?
ajouter le champs dans ton "select" et à concaténer le
création du nom ...
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.
-----Message d'origine-----
reBonjour! :O)si je supprime nodx.ensureVisible je n'ai plus la
possibilité de développer l'algorithme.
Regarde du côté de la propriété Expanded d'un noeud. Si,
voulais déployer tous les noeuds du premier niveau, tu
légèrement la partie de code servant à remplir le
noeuds dès leur ajoût au TreeView :
'***
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
TreeView1.Nodes.Add(, , sTypeKey,
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
Call TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue)
Else
Call TreeView1.Nodes.Add(sSousTypeKey,
sSousSousTypeKey, nTypeValue)
End If
'***Debug.Print Node.FullPath
'affiche la sélection
MsgBox Node.FullPath
le problème c'est qu'il me faut appuyer successivement
le OK de la msgBox pour avoir le résultat
Si tu as VB 6, Debug.Print envoi la chaine de caractère
exécution" (Ctrl-G).
Si tu as VB 5, tu peux envoyer la chaine directement sur
meme dans un picturebox créer à cet effet), comme ceci :
'***
' on met ceci dans le form_load
Me.AutoRedraw = True
' et on écrit comme ceci
Me.Print Node.FullPath
'***En fait ce que je veux faire c'est avec command1_click :
je créé une nouvelle table de dépenses dans laquelle
j'ajouterai les enregistrements de la table initiale
cochés dans le treeview.
Tu pourrais stocker le ID réel de l'enregistrement dans
chaque noeud :
'***
Dim nd As MSComctlLib.Node
If (sTypeValue > sOldTypeValue) Then
' ajoute le noeud parent et le déploie du
Set nd = TreeView1.Nodes.Add(, , sTypeKey,
nd.Expanded = True
nd.Tag = sValue ' sValue contient IDdepense
sOldSousTypeValue = ""
ElseIf (sSousTypeValue > sOldSousTypeValue) Then
TreeView1.Nodes.Add(sTypeKey, tvwChild,
nTypeValue).Tag = sValue
Else
TreeView1.Nodes.Add(sSousTypeKey, tvwChild,
nTypeValue).Tag = sValue
End If
'***
Ensuite tu peux faire un fonction (ou modifier
et PrintSelectedNodesCaptionRecurse()) afin de faire
l'autre table..
quelque chose comme :
'***
Private Sub TransfertRecord(ByRef sIDdepense As String)
' code pour transferré l'emregistrement ici
End Sub
Private Sub PrintSelectedNodesCaptionRecurse(ByRef Node
Dim nd As MSComctlLib.Node
' on vérifie si le noeud est coché,
' si oui on print
If (Node.Checked) Then
' on suppose que la table existe déjà..
Call TransfertRecord(Node.Tag)
End If
' on vérifie s'il a des p'tits
If (Node.Children > 0) Then
' il a des p'tits, on rappelle
' la fonction sur chacun d'eux
Set nd = Node.Child ' renvoit le premier noeud du
Do Until nd Is Nothing
Call PrintSelectedNodesCaptionRecurse(nd)
Set nd = nd.Next ' renvoit le prochain noeud
Loop
End If
End Sub
'***LE TOP pour mon appli, ce serait que je puisses
ajouter à mon treeview un listview d'une colonne pour
affiché le montant (champ "montant" de la table access)
la dépense correspondant au type, sous-type,...
Et si tu l'affichais à la suite du nom du nom du noeud ?
ajouter le champs dans ton "select" et à concaténer le
création du nom ...
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -
http://www.mentalis.org/agnet/apiguide.shtml -
.