Test existance Node dans 1 TreeView [Résolu]

yan35 185 Messages postés dimanche 29 juin 2003Date d'inscription 20 juin 2013 Dernière intervention - 9 sept. 2004 à 03:12 - Dernière réponse : Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention
- 9 sept. 2004 à 20:10
Pour tester la présence d'un Node dans 1 TreeView, je fais le code suivant :

If TreeExtr.Nodes(strPath) Is Nothing Then
msgbox "Ce Node N'existe pas encore"
..... suite ....
Else 'le node existe
.......suite .....
End If

Lorsque le Node existe VB passe correctement dans la boucle Else ...., mais s'il n'existe pas, le résultat du test devrait être à Nothing en entraîner la msgbox, au lieu de ça je récupère 1 erreur 35601 !

Qq'un a-t-il 1 idée sur le problème ?
D'avance Merci.
Afficher la suite 

9 réponses

Meilleure réponse
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 9 sept. 2004 à 08:57
3
Merci
Normal !!! Il faut passer par un gestionnaire d'erreur car si le node n'existe pas, au moment ou il évalue l'expression suivante : "TreeExtr.Nodes(strPath)", VB se plante !!!
Function NodeExist(strPath as String) As Boolean
Dim Buffer as String
NodeExist = True
On Error Goto NoNode
Buffer = TreeExtr.Nodes(strPath).Text
Exit Function
NoNode:
NodeExist = False  ' Ligne inutile ! Mais clarifie le code !
End Function


Christophe R.

Merci crenaud76 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Meilleure réponse
yomm 515 Messages postés dimanche 17 février 2002Date d'inscription 10 mars 2008 Dernière intervention - 9 sept. 2004 à 15:45
3
Merci
en fait le treeview fonctionne plus ou moins comme une collection... Et pour une collection le seul moyen (que je connaisse) de savoir si un élément existe ou pas c'est de tester avec une gestion d'erreur ...Donc cela me semble étrange que tu puisses faire un Is Nothing...

Toutefois , puiske tu cherches à avoir des infos...
Voici un cas où Is Nothing peut servir dans un Treeview:
Voici un treeview, je n'ai pas de FullRowSelect= True toutefois je cherche à faire en sorte que si mon utilisateur click sur une ligne, la ligne se sélectionne...

Pour cela rien de plus simple :

Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim NodeClick As Object
    
'on test à la position 0
'attention il faut rajouter la largeur d'un + ou d'une icone au besoin, mais ce n'est pas ce qui nous intéresse là...
    Set NodeClick = TreeView1.HitTest(0, y)
    
'et je vérifie si l'objet est bien existant .....Notes alors que je ne fait pas du tout référence a la collection Nodes du treeview . Là , je récupère l'objet placé à la position 0,y
    If NodeClick Is Nothing Then Exit Sub

'Or mon control est un treeview donc l'obejt en question est une Node ;-)
'Donc je fait :
    NodeClick.Selected = True
End Sub


Voilà j'espère que cela t'auras un peu aidé sur l'utilisation du Is Nothing sur un Treeview

@+

Yomm >:)

[mailto:yommvb@ifrance.com yommvb@ifrance.com]

Et que la source soit avec toi!!!!!

Merci yomm 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Meilleure réponse
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 9 sept. 2004 à 19:28
3
Merci
Salut Yannick, à part utiliser la routine d'erreur, ce qui me semble le plus simple, il te reste la possibilité de faire ta propre fonction. voici ce que j'ai trouvé sur le net:

Récupérer un noeud avec sa clé : Problème !

Si vous avec un peu l'habitude de travailler avec le contrôle ListView, vous savez qu'il est très simple de récupérer un ListItem en donnant sa clé :

Set wItem = LV_Essai.ListItems("LaClé")

Avec le contrôle TreeView ça ne marche pas ! On ne peut récupérer un Node qu'en donnant son index car le paramètre attendu est converti en Long par le contrôle :

Set wNode = Tv1.Nodes(3)

Pourtant le fait de pouvoir récupérer un noeud par sa clé me semble un minimum. Il faut juste se créer une petite fonction qui prend comme paramètres le TreeView concerné et la clé à retrouver et qui retourne le Node trouvé ou Nothing si la clé ne correspond à aucun noeud :

Public Function RetournerNoeud(ByVal wTV As TreeViewCtl, ByVal wKey As String) As Node
Dim i As Integer
Set RetournerNoeud = Nothing
For i = 1 To wTV.Nodes.Count
If wTV.Nodes(i).Key = wKey Then
Set RetournerNoeud = wTV.Nodes(i)
Exit For
End If
Next
End Function

Merci Gobillot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Meilleure réponse
yomm 515 Messages postés dimanche 17 février 2002Date d'inscription 10 mars 2008 Dernière intervention - 9 sept. 2004 à 19:56
3
Merci
>>Gobillot
Le but recherché par yan35 n'était pas de trouver une node par sa clé mais de pouvoir savoir si une node avec une clé X existe ou pas sans avoir a toute les tester

Le code proposé par crenaud76 serait donc plus rapide...Et en le modifiant quelque peu on obtien le même résultat que toi...

Function GetNode(strPath as String) As Node

On Error Goto NoNode
set GetNode = TreeExtr.Nodes(strPath)
Exit Function
NoNode:
set GetNode = Nothing
End Function


Yomm >:)

[mailto:yommvb@ifrance.com yommvb@ifrance.com]

Et que la source soit avec toi!!!!!

Merci yomm 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

yan35 185 Messages postés dimanche 29 juin 2003Date d'inscription 20 juin 2013 Dernière intervention - 9 sept. 2004 à 11:21
0
Merci
Bonjour,
Je te remercie de ta réponse, mais quelque chose m'échappe toujours.
En effet, j'ai vu dans de la doc sur le net que pour tester l'existance d1 node on pouvait vérifier le retour du test à Nothing en écrivant : TV.Nodes(sa référence) Is Nothing.

C'est juste pour en savoir + et éventuellement éviter 1 test supplémentaire que je m'accroche à comprendre la condition Is Nothing, sinon ton gestionnaire d'erreur me convient parfaitement.

Merci
yannick
yan35 185 Messages postés dimanche 29 juin 2003Date d'inscription 20 juin 2013 Dernière intervention - 9 sept. 2004 à 16:26
0
Merci
Merci pour tes explications sur l'utilisation de Is Nothing.
Pour mon problème j'utiliserai 1 gestion d'erreur.
Pour info voici le lien où j'ai trouvé le test de l'existence d'1 noeud par Is Nothing :
http://vb.developpez.com/faq/?page=Controles#noeud_existe

?? ;)
yan35 185 Messages postés dimanche 29 juin 2003Date d'inscription 20 juin 2013 Dernière intervention - 9 sept. 2004 à 19:58
0
Merci
Bonsoir Daniel,

Ca c'est beau comme fonction. MERCI.
Reste à savoir, si par contre, il n'est pas + rapide et moins consommateur de ressources de passer par 1 gestionnaire d'erreurs s'il y a de nombreux tests à faire (ce qui est mon cas) ?
Yannick :)
yan35 185 Messages postés dimanche 29 juin 2003Date d'inscription 20 juin 2013 Dernière intervention - 9 sept. 2004 à 20:05
0
Merci
Gros Merci,

Ton code fait la synthèse de tout et apporte la réponse au doute que j'avais sur la rapidité de la fonction proposée par Gobillot.

yannick :)
Gobillot 3140 Messages postés vendredi 14 mai 2004Date d'inscription 31 mars 2015 Dernière intervention - 9 sept. 2004 à 20:10
0
Merci
Je sais. en fait il faut bien tester toutes les clés pour savoir si elle existe ou pas. Je pense que c'est ce que doit faire le système mais il doit certainement le faire plus vite...
Cette fonction n'est pas de moi, mais c'était pour montrer qu'il existait une autre possibilité.

Daniel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.