IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Rechercher des nodes par clé dans une TreeView


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut Rechercher des nodes par clé dans une TreeView
    Bonjour

    je bloque depuis 2 heures sans comprendre le problème

    j'ai une treeview tvPos que je tente de remplir
    je n'arrive pas a accéder au noeud fils par leur clé



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
            tvPos.Nodes.Clear()
            tvPos.Nodes.Add("key1", "noeud 1 ") 'NODE PARENT OK
     
            tvPos.Nodes("key1").Nodes.Add("key2", "noeud 2") 'OK LE NODE FILS EST CREE sous le NODE 1
     
            tvPos.Nodes("key2").Nodes.Add("key3", "noeud 3")  '<=== PLANTE CAR NE TROUVE PAS LE NODE 2 !?
    c'est surement tout simple mais là je bloque :-(
    quelle erreur ai je fais ?

    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    Alors après recherche, mon problème vient du fait que la collection node d'un treeview ne contient que les node de premier niveau
    les node fils sont contenus dans des treenode de chaque node

    donc comment retrouver un node par sa clée si on ne sait pas dans quel treenode il se trouve ?

    j'ai une collection de donnée hiérarchique (chacun contenant un idParent) que je voudrais afficher dans une treeview et je bloque toujours


    EDIT
    extrait de
    http://www.derniersparus.com/ajouter...les-retrouver/

    Pour être plus clair, même si vous avez une key unique dans le TreeView, vous ne la trouverez par

    myTreeView.Nodes(key)

    que si elle est au premier niveau de l’arborescence.

    Ce qui signifie que pour retrouver une clef dans un arbre complet, il vous faut écrire une recherche récursive. Vous savez sans doute le faire, sinon un peu de patience, j’en parlerai bien un jour.

    ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

    donc GROS probleme, c'est un gros changement depuis VB6 qui complique vraiment les treeview

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    parcourir a chaque fois que l'on veut ajouter un node fils l'ensemble des treenode pour trouver le bon node parent me semble délirant

    y'a vraiment pas un autre moyen ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    ok donc il faut faire une procédure récursive de recherche de TreeNode parmi toutes les TreeNodeCollection que contient une treeview

    voila mon code qui fonctionne et qui m'est bien pratique si cela peut servir à d'autres

    la procédure FindNodeByKey se charge de trouver et de renvoyer le treenode ayant la clé demandée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    Public Class Form1
     
        'ajoute un noeud racine avec la clé "TextBox1.Text"
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            TreeView1.Nodes.Add(TextBox1.Text, TextBox1.Text)
        End Sub
     
        'ajoute un noeud dans la treeview sous le noeud ayant pour clée "TextBox1.Text"
        'quelque soit sa place ou son niveau dans l'arborescence 
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            AddNode(TreeView1, TextBox1.Text, TextBox2.Text, TextBox2.Text)
        End Sub
     
     
        'trouve le noeud ayant pour clé "key" dans l'ensemble de tous les noeuds et le renvoie dans "FindNode"
        Public Sub FindNodeByKey(ByVal myNodes As TreeNodeCollection, ByVal key As String, ByRef FindNode As TreeNode, ByRef isFind As Boolean)
            Dim Child As TreeNode
     
            If myNodes.ContainsKey(key) Then
                FindNode = myNodes(key)
                isFind = True
            Else
                If isFind = False Then
                    For Each Child In myNodes
                        FindNodeByKey(Child.Nodes, key, FindNode, isFind)
                    Next
                End If
            End If
     
        End Sub
     
        'ajoute un noeud dans la treeview sous le noeud ayant pour clé "keyParent"
        Public Sub AddNode(ByRef tvw As TreeView, ByVal keyParent As String, ByVal key As String, ByVal text As String)
            Dim aNode As New TreeNode
            Dim isFind As Boolean
     
            isFind = False
     
            FindNodeByKey(tvw.Nodes, keyParent, aNode, isFind)
     
            aNode.Nodes.Add(key, text)
     
        End Sub
     
     
    End Class
    j'ai pas réussi a faire une function qui retourne directement le TreeNode
    mais en sub avec un argument byref cela fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/10/2014, 16h05
  2. recherche par mots dans une phrase ou titre
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/09/2006, 09h29
  3. Creer des user par code dans une base de donnees Interbase
    Par dachir dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/07/2006, 14h55
  4. [VB.NET] Faire une recherche dans une treeview
    Par Aspic dans le forum VB.NET
    Réponses: 3
    Dernier message: 15/11/2005, 19h10
  5. Supprimer des éléments dans une TreeView ?
    Par souch dans le forum Composants VCL
    Réponses: 4
    Dernier message: 16/09/2005, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo