winvsmac
Messages postés84Date d'inscriptionsamedi 26 mai 2007StatutMembreDernière intervention14 décembre 2016
-
13 avril 2009 à 10:03
winvsmac
Messages postés84Date d'inscriptionsamedi 26 mai 2007StatutMembreDernière intervention14 décembre 2016
-
16 mai 2009 à 11:47
Bonjour,
Je n'arrive pas a régler le problème suivant :
Je charge dans un treeview un fichier texte, dont voici le code :
'ouverture fichier
Open File For Input As #19
Do
'on lit la ligne
Line Input #19, lin
'on regarde le nombre d'espace qui correspond au nombre de parents
currentLevel = Len(lin) - Len(LTrim$(lin))
txt = LTrim$(lin)
'on redimensionne le tableau si un nouveau niveau existe
If currentLevel > MaxLvl Then
MaxLvl = MaxLvl + 1
ReDim Preserve nodes(MaxLvl) As Node
End If
'On enregistre dans le tableau le noeud courant et son niveau dans l'arbre
If currentLevel <> 0 Then
Set nodes(currentLevel) = twMenu.nodes.Add(nodes(currentLevel - 1).key, tvwChild, "a" & twMenu.nodes.Count, txt)
nodes(currentLevel).Sorted = True
Else
Set nodes(currentLevel) = twMenu.nodes.Add(, , "a" & twMenu.nodes.Count, txt)
nodes(currentLevel).Bold = True
nodes(currentLevel).BackColor = vbYellow
nodes(currentLevel).Sorted = True
End If
lastLevel = currentLevel
Loop While Not EOF(19)
Close #19
Quand je lance le code une 1ere fois, tout va bien. Par contre dans que je le lance une seconde fois, il y a le message INDICE EN DEHORS DE LA PLAGe. ce message fait référénce à la ligne signalée en rouge.
Je dois faire quoi pour pouvoir lancer le code plusieurs fois de suite sans avoir le message d'erreur ? Merci pour votre aide.
Environnement VB6.
Jerome
A voir également:
La valeur n'est pas comprise dans la plage attendue
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 13 avril 2009 à 13:52
Salut
Dans un ReDim, il n'est pas nécessaire de repréciser le type (risque d'erreur)
Attention à ne jamais utiliser de nom de variabnles pouvant ressembler aux mots clés du langage (Nodes) !
Quand l'erreur survient, que vcalent les variables utilisées da&ns cette ligne ?
currentLevel
twMenu.nodes.Count
txt
Il y a longtemps que je n'ai pas géré de TreeView, mais je ne vois pas pourquoi tu crées un tableau de Nodes, tu les as dans le TreeView, pourquoi refaire du stockage externe ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 13 avril 2009 à 15:38
Ok, ça ne t'empèche pas de comprendre pourquoi cela ne marche pas.
Pour les techniques liées aux TreeView, suffit de charger quelques exemples en recherchant "treeview" dans la recherche.
Et les réponses à mes questions ?
Si tu veux avancer, il y a un mimumum d'info à fournir, tu crois pas ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 15 avril 2009 à 15:34
Re
Tu dis que ça plante la deuxième fois : tu essayes de réinsérer les mêmes données ?
Existe t-il un Node d'index 0 (puisque currentLevel = 1) qui possède une Key ?
Le problème dans ton code, c'est que les éléments existent deux fois :
- une fois dans le TreeView
- une autre fois dans le tableau de Nodes
--> Difficile à dépanner/comprendre
Regarde dans l'aide du TreeView + les sources du site, par exemple <celle-ci> au hasard, tu verras comment retrouver un Node dans le TreeView à partir de sa Key --> le but étant de supprimer ce tableau de Nodes.
Si tu as des infos 'personnelles' (info ne faisant pas partie de la structure organisationnelle du TreeView) à stocker dans chaque Node, il y a la propriété Tag de chaque Node dans lequel tu peux stocker ce que tu veux, par exemple ton Level.
Par contre, quand tu rechercheras un Level parmi les Tag des Nodes de ton TreeView, il faudra parcourrir chaque Node, genre
Dim monNode
For Each monNode in TreeView.Nodes
If monNode.Tag = monLevel - 1 Then
' Ici ton insertion du nouveau Node
Exit For
End If
Next
A quoi te sert lastLevel ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)