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 :

Checkedlistbox et arborescences - Décocher les enfants


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut Checkedlistbox et arborescences - Décocher les enfants
    Bonjour,

    j'ai réalisé un petit programme de Backup qui fait plutôt bien son job pour le moment. (Sélection du dossier a backup, on liste les dossiers a l'intérieur et on les rajoutes a la checkedlistbox, voir ci dessous)
    Nom : checkedlistbox.png
Affichages : 199
Taille : 348,4 Ko

    J'aimerai rajouter un petit plus qui est :
    - Si on décoche (ou coche) un dossier avec des sous dossiers, décocher l'ensemble des sous dossiers
    J'ai pensé a une démarche que j'essai de mettre en place, mais rien n'y fait, .

    Je m'explique, j'ai pensé procéder de la manière suivante, mais impossible, je n'arrive pas a la mettre en forme, je tourne en ronds (d'ou m'a venu d'ailleurs ^^) :

    - Je récupère le string de la ligne que je viens de décocher (ex :" C:\MonBackup\a\"
    - Je retire les espaces du début avec un Trim & je compte le nombre de caractère de mon string (15 ici)
    - Je récupère l'ensemble des strings de mon tableau, supprime les espaces du début et garde uniquement les 15 premiers caractères
    - Je compare du coup le string de ma ligne décocher a l'ensembles des strings et je décoche ceux qui match.

    Si quelqu'un pourrait m'aiguiller ^^
    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Comment sont générés les éléments enfant?

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    Pourquoi ne pas utiliser un vrai Treeview ?

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    @ZenZiTone
    C'est de la bidouille ^^
    Quand je passe a un sous dossier, je rajoute automatiquement 2 espaces avant le string
    Donc c'est visuel principalement.

    @ebastien
    Bah, j'ai pas réussi en m'en dépatouiller donc j'ai trouvé une autre solution. Je ne suis pas contre une explication pousser, sachant que la docs... bah pas trouvé spécialement claire. Apres si on me propose un code tout fait (concernant le tree view) si je le comprends pas, je ne pense pas l'utiliser (je trouve inutile d'utiliser un code ci je ne comprends pas ce dernier, avis perso bien sur)

    Actuellement ce que je fais c'est :

    1. Sélection du dossier a backup
    2. Création de l’arborescence (dossier uniquement)
    3. On décoche les lignes que l'on ne souhaite pas save.
    4. On save le tous dans un XML


    Si déjà un dossier a backup a été sélectionné, alors :

    1. Je prends mon XML
    2. Je crée les lignes grace au XML


    Merci d'avance pour votre retour
    Fabien

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Par défaut
    Citation Envoyé par kiuraaaa Voir le message
    @ebastien
    Bah, j'ai pas réussi en m'en dépatouiller donc j'ai trouvé une autre solution. Je ne suis pas contre une explication pousser, sachant que la docs... bah pas trouvé spécialement claire.
    L'exemple me semble plutôt simple et claire. Tu as même une propriété UseCheckboxes afficher les Checkboxes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ' Populates a TreeView control with example nodes. 
    Private Sub InitializeTreeView()
        treeView1.BeginUpdate()
        treeView1.Nodes.Add("Parent")
        treeView1.Nodes(0).Nodes.Add("Child 1")
        treeView1.Nodes(0).Nodes.Add("Child 2")
        treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
        treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
        treeView1.EndUpdate()
    End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Pour mettre un dossier et ses sous-dossiers dans un treeview, on utilise généralement le recursif, à condition que l'arborescence ne soit pas trop profonde.
    Ecrit rapidement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            private void AddDirectory(TreeNode Node, String Dir)
            {
                String[] subDirs = Directory.GetDirectories(Dir);
                foreach (var subdir in subDirs)
                {
                    TreeNode SubNode = Node.Nodes.Add(subdir);
                    AddDirectory(SubNode, subdir);
                }
            }
    et pour l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                TreeNode RootNode = treeView1.Nodes.Add(@"c:\temp");
                AddDirectory(RootNode, @"c:\temp");
    Désolé, c'est du C# et je viens de voir que nous sommes sur un forum VB.NET mais la conversion est simple.

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    @ZenZiTone

    Et pourtant... personnellement je ne vois pas comment créer l'arborescence avec cela
    Je crois que ebastien va m'éclairer.

    @ebastien

    Alors que j'essai de comprendre ton code. J'ai juste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub AddDirectory(Node As TreeNode, Dir As String)
     
    ' déclare un variable "SubDirs" en tant que chaîne de caractère
    ' SubDirs = Chemin d’accès pour lequel on souhaite créer l'arborescence
    ' On récupère les sous-dossiers du dossier 
    	Dim subDirs As string() = Directory.GetDirectories(Dir)
     
    ' On boucle sur notre variable et on rajoute notre arbo a notre Tree ? 
    	For Each subdir As String In subDirs
    		Dim SubNode As TreeNode = Node.Nodes.Add(subdir)
    		AddDirectory(SubNode, subdir)
    	Next
    End Sub


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'le "RootNode" ici corresponds bien dossier pour lequel on souhaite créer l'arboresence ?
    Dim RootNode As TreeNode = treeView1.Nodes.Add("c:\temp")
    AddDirectory(RootNode, "c:\temp")
    Il me reste encore (pas encore testé le code) a rajouter checkbox et faire en sort que si je décoche un parent, les enfants suivent.
    De plus, si je veux enregistrer la treeview ainsi que statut des box dans mon xml pour pouvoir l'injecter a la réouverture du programme, va falloir que je bataille un peu plus ^^
    Merci a vous deux en tout cas ^^

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Bonsoir
    Apres plusieurs heures de travail, recherches et discutions approfondies, la treeview n'a plus de secret pour moi xD
    Il me manque du coup le dernier détail, et but de ma venu, décocher les enfants du parents décocher ^^
    Si je trouve je vous fait signe

    Bonne nuit

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Allez je touche au but !
    Décocher les enfants quand je décoche le parent ? CHECK
    Du coup vu que j'ai changé la création de mon xml (si dessous), j'ai du mal a réalisé ma condition qui est :
    1. Lis le fichier XML
    2. Pour chaque node je veux que tu fasses
    3. Si checked = true alors tu me retourne la valeur de text (que je puisse réalisé une copie avec le lien d'acces)
    4. Si checked = false alors tu ignores


    Merci d'avance pour votre retour
    Qui sais, je vais peut être trouver la nuit prochaine ^^
    Bonne nuit a vous.

    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
    <?xml version="1.0" encoding="utf-8"?>
    <TreeView>
    <node text="C:\MonBackup" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a\d" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a\d\dfd" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie (2)" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie (3)" imageindex="-1" checked="True" />
    </node><node text="C:\MonBackup\a\e" imageindex="-1" checked="False" />
    <node text="C:\MonBackup\a\f" imageindex="-1" checked="False" />
    </node><node text="C:\MonBackup\b" imageindex="-1" checked="False" />
    <node text="C:\MonBackup\c" imageindex="-1" checked="True">
    <node text="C:\MonBackup\c\Nouveau dossier" imageindex="-1" checked="True" />
    </node>
    </node>
    </TreeView>

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    perso je fais comme ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Me.TreeView1.Nodes.Clear()
            Me.TreeView1.Nodes.Add("<Champ1>[ValueChamp1]</Chmap1>", "toto")
            Me.TreeView1.Nodes.Add("<Champ2>[ValueChamp1]</Chmap2>", "titi")
            Me.TreeView1.Nodes("<Champ1>[ValueChamp1]</Chmap1>").Nodes.Add("<SChamp2>[sValueChamp1]</SChmap2>", "TOTO2")
            Me.TreeView1.Nodes("<Champ2>[ValueChamp1]</Chmap2>").Nodes.Add("<SChamp2>[sValueChamp2]</SChmap2>", "TITI2")
        End Sub
    Nom : Sans titre.png
Affichages : 147
Taille : 8,1 Ko

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Bah j'ai utilisé DeserializeTreeView & SerializeTreeView pour enregistre et charger la TreeView a l'aide d'un xml.
    Comme dit un peu plus haut, la je bloque (pas encore regardé en détails) sur :

    1. Lis le fichier XML
    2. Pour chaque node je veux que tu fasses
    3. Si checked = true alors tu me retourne la valeur de text (que je puisse réalisé une copie avec le lien d'acces)
    4. Si checked = false alors tu ignores

  12. #12
    Invité
    Invité(e)
    Par défaut
    Le xml ce trouve dans le nom du nœud quand tu en cheque un tu cheque son xml non?

  13. #13
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    euh... pas compris :s
    Désolé ^^

  14. #14
    Invité
    Invité(e)
    Par défaut
    Par exemple j'ai un fichier xml. Je nome les nœuds comme le les données du xml et j'affiche dans la valeur du nœud.

    Ainsi quand je coche ou décoche un nœud intercepte l'évènement click et je sais sur la ou les branche ou il faut intervenir!

    Par exemple.j'ai des câblage électrique qui peuvent avoir 300 fils.

    Si je décoche un câblage je décoche ses 300 fils.

    Si je décoche une section d'un câblage je décoche tous les fils de la section peut importe la couleur!

  15. #15
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    l'histoire de coche / décoche j'ai réussi a le gérer (ainsi que décocher les enfants)
    La je bloque sur la récupération de mes attributs de mon fichier XML.
    En gros, j'ai mon arborescence, je coche & decoche ce que je veux / veux pas.
    Ensuite je cliquer sur un bouton afin d'enregistrer mon XML (voir si dessous ^^)

    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
    <?xml version="1.0" encoding="utf-8"?>
    <TreeView>
    <node text="C:\MonBackup" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a\d" imageindex="-1" checked="True">
    <node text="C:\MonBackup\a\d\dfd" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie (2)" imageindex="-1" checked="True" />
    <node text="C:\MonBackup\a\d\dfd - Copie (3)" imageindex="-1" checked="True" />
    </node><node text="C:\MonBackup\a\e" imageindex="-1" checked="False" />
    <node text="C:\MonBackup\a\f" imageindex="-1" checked="False" />
    </node><node text="C:\MonBackup\b" imageindex="-1" checked="False" />
    <node text="C:\MonBackup\c" imageindex="-1" checked="True">
    <node text="C:\MonBackup\c\Nouveau dossier" imageindex="-1" checked="True" />
    </node>
    </node>
    </TreeView>
    Je recherche donc un petit bout de code qui me permettra de parcourir mon xml, et récupérer la valeur du "text" quand checked = True

    Edit : Je passe en résolu car ma question ne corresponds plus au sujet.

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

Discussions similaires

  1. Recuperation Arborescence
    Par ramseb dans le forum HyperFileSQL
    Réponses: 6
    Dernier message: 16/06/2003, 09h52
  2. controle d'arborescence
    Par billyboy dans le forum Windows
    Réponses: 4
    Dernier message: 13/06/2003, 21h19
  3. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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