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 :

Savoir les noeuds cochés dans une TreeView [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut Savoir les noeuds cochés dans une TreeView
    Bonjour à tous,

    Voilà je vous explique mon problème : J'aimerais savoir quels noeuds enfants ont été cochés.
    Des images seront plus parlante.

    Nom : 13.PNG
Affichages : 859
Taille : 3,9 Ko Ici j'aimerais récupérer 1 et 3
    Nom : 46.PNG
Affichages : 823
Taille : 2,6 Ko Ici, j'aimerais récupérer 4 et 6
    Nom : 123456.PNG
Affichages : 816
Taille : 2,4 Ko Tandis que là je veux récupérer 1 2 3 4 5 6

    Merci d'avance

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Bonjour,

    Pour ce faire tu vas devoir boucler sur les noeuds de ton treeview, et stocker les noeuds checkés dans une list(of node) (la collection de type treeNodeCollection n'ayant pas de constructeur et étant difficilement utilisable). Egalement, il faut que pour chacun de ces noeuds, tu fasses la même chose pour les noeuds enfants, et enfants des enfants, etc (Donc besoin de récursivité, donc idéalement faire une fonction)

    En terme de code ça devrait donner quelque chose comme ça (pas testé):

    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
        ''' <summary>
        ''' Retourne une liste de treenode checké parmis une TreeNodeCollection
        ''' </summary>
        ''' <param name="lesNodes">La TreeNodeCollection du treeview</param>
        ''' <returns>Une list(of treenode) des noeuds checkés (enfants compris)</returns>
        ''' <remarks></remarks>
        Public Shared Function getNodesChecked(lesNodes As TreeNodeCollection) As List(Of TreeNode)
            Dim listeNodesChecked As New List(Of TreeNode)
     
            For Each leNode As TreeNode In lesNodes
                If leNode.Checked Then
                    listeNodesChecked.Add(leNode)
                End If
                listeNodesChecked.AddRange(getNodesChecked(leNode.Nodes)) 'Recursivité pour fouiller les noeuds enfants
            Next
     
            Return listeNodesChecked
        End Function

  3. #3
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    Merci John,

    Ta fonction fonctionne quand je l'importe dans mon Visual Studio.

    Le soucis maintenant, c'est comment créer une collection de tous mes nodes enfants qui eux sont variables mais qui ne possèdes aucuns enfants.

    C'est la même structure que indiqué lors de mon premier post :

    Nom : 13.PNG
Affichages : 859
Taille : 3,9 Ko Ici j'aimerais récupérer 1 et 3
    Nom : 46.PNG
Affichages : 823
Taille : 2,6 Ko Ici, j'aimerais récupérer 4 et 6
    Nom : 123456.PNG
Affichages : 816
Taille : 2,4 Ko Tandis que là je veux récupérer 1 2 3 4 5 6

    Egalement, il faut que pour chacun de ces noeuds, tu fasses la même chose pour les noeuds enfants, et enfants des enfants,
    En gros, j'ai un noeud parent ( pas plus ) et un nombre de noeud enfant variable. Mais pas de noeud enfants des noeuds enfants. ( )

    Cordialement,

  4. #4
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par ekydeta Voir le message
    En gros, j'ai un noeud parent ( pas plus ) et un nombre de noeud enfant variable. Mais pas de noeud enfants des noeuds enfants. ( )
    Pas de noeuds enfants de noeuds enfants pour l'instant. Et si dans le futur ton programme évolue et que chacune de tes 'phases' possédaient plusieurs 'étapes' par phase ?

    Quand bien même ça n'arriverai jamais, la récursivité ne planterait pas (c'est là tout l'avantage de cette dernière, c'est le même principe que les algos de parcours de dossier, sous-dossier, sous-sous dossier etc. Tant qu'il y a un étage inférieur, on descend, sinon on passe au voisin, et on fouille ses étages inférieurs etc etc)

    Si tu regardes dans la fonction que je t'ai proposé, la notion de récursivité est à la ligne 14, dans l'éventualité où il n'y a pas d'enfants, on retourne une liste vide donc on ne boucle pas, donc l'algo continue comme si de rien n'était et tout marche.

  5. #5
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    Bonjour, j'ai trouvé la solution

    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
       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            MessageBox.Show(CountCheckedNodes(TreeView1.Nodes(0)).ToString)
        End Sub
     
        ' Return the number of checked nodes in the specified tree
        Public Function CountCheckedNodes(ByVal rootNode As TreeNode) As Integer
            Dim count As Integer = 0
            ' count the root node, if checked
            If rootNode.Checked Then count = 1
            ' check the child nodes, by recursively calling this function for all of 
            ' them
            Dim tvn As TreeNode
            For Each tvn In rootNode.Nodes
                count += CountCheckedNodes(tvn)
            Next
            Return count
        End Function

    En faite, non ça m'indique seulement le nombre de noeud coché

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut

  7. #7
    Membre actif
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 96
    Par défaut
    Réussi !

    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
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim count As Integer = 0
            Dim tvn As TreeNode
            For Each tvn In TreeView1.Nodes(0).Nodes
                If tvn.Checked Then
                    count += 1
                End If
            Next
     
            Dim tableau(count) As String
            For Each tvn In TreeView1.Nodes(0).Nodes
                If tvn.Checked = True Then
                    'MessageBox.Show(tvn.Text)
                    Dim num() As String
                    Num = Split(tvn.Text, " ")
                    MessageBox.Show(num(1))
                    'MessageBox.Show(t(0))
                    'MessageBox.Show(Split(tvn.Text, " ").ToString)
                End If
            Next
        End Sub

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

Discussions similaires

  1. [XL-2007] ListView - Copier uniquement les lignes cochées dans une autre ListView
    Par BenHK dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2009, 01h46
  2. Conserver les noeuds ouverts dans une grille
    Par ghotique dans le forum Flex
    Réponses: 4
    Dernier message: 03/12/2009, 13h05
  3. [PHP 5.3] Récupérer les checkbox cochées dans une variable
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 01/06/2009, 12h25
  4. Réponses: 3
    Dernier message: 15/05/2008, 13h43
  5. Réponses: 2
    Dernier message: 26/04/2006, 09h34

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