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 :

Sélection d'un treeview 2 fois dans la listbox


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Points : 23
    Points
    23
    Par défaut Sélection d'un treeview 2 fois dans la listbox
    Bonjour,
    J'ai un treeview du c: qui lorsque je coche une checkbox d'un dossier, le fullpath de celui-ci s'affiche dans une listbox.
    Sauf que dans mon cas il s'affiche 2 fois et différemment en plus.
    La preuve en image:
    Nom : Capture.PNG
Affichages : 193
Taille : 30,8 Ko

    Mais pourquoi donc???

    Merci de m'aider.

    voici un bout du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Private Sub treeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
            'affiche dans la listbox les items de treeview1 qui seront "checké"
            If e.Node.Checked Then ListBox1.Items.Add(e.Node.FullPath)
     
            'efface dans la listbox les items de treeview1 qui seront "déchecké"
            If e.Node.Checked = False Then ListBox1.Items.Remove(e.Node.FullPath)
        End Sub

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    n'auriez vous pas des déclarations dupliquées, genre :
    Code VB.Net : 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
        Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck
            'Le code s'exécute uniquement si l'utilisateur a provoqué l'état activé au changement .  
            If e.Action <> TreeViewAction.Unknown Then
                If e.Node.Nodes.Count > 0 Then
                    'Appelle la méthode de CheckAllChildNodes, en passant dans le courant   
                    'valeur Analyse du TreeNode dont vérifié l'état changé.   
                    Me.CheckAllChildNodes(e.Node, e.Node.Checked)
                End If
            End If
     
        End Sub
     
        Private Sub treeView1_AfterCheck(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
            'affiche dans la listbox les items de treeview1 qui seront "checké"
            If e.Node.Checked Then ListBox1.Items.Add(e.Node.FullPath)
     
            'efface dans la listbox les items de treeview1 qui seront "déchecké"
            If e.Node.Checked = False Then ListBox1.Items.Remove(e.Node.FullPath)
        End Sub
    A voir.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Si effectivement mais si je le supprime je perds l'héritage sur les checkboxs enfants, bon en même temps sur cette version de l'application l'important est de pouvoir sélectionner les dossiers à la racine du C:.
    Mais j'aimerai en faire une autre version plus "générale" et complète qui aura surement plus de fonctionnalités (dont l'héritage des checkboxs).
    Peut-être que pour la 2ème version je garderai l'héritage et que j'utiliserai le "double-clic" pour remplir la listbox....à voir.

    voici une partie du code au cas ou y aurai une 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
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
        Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
     
            Dim newSelected As TreeNode = e.Node
            ListView1.Items.Clear()
            Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo)
            Dim subItems() As ListViewItem.ListViewSubItem
            Dim item As ListViewItem = Nothing
            Dim dir As DirectoryInfo
            For Each dir In nodeDirInfo.GetDirectories()
                item = New ListViewItem(dir.Name, 0)
                subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "Directory"), New ListViewItem.ListViewSubItem(item, _
                    dir.LastAccessTime.ToShortDateString())}
                item.SubItems.AddRange(subItems)
                ListView1.Items.Add(item)
            Next dir
            Dim file As FileInfo
            For Each file In nodeDirInfo.GetFiles()
                item = New ListViewItem(file.Name, 1)
                subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "File"), New ListViewItem.ListViewSubItem(item, _
                    file.LastAccessTime.ToShortDateString())}
                item.SubItems.AddRange(subItems)
                ListView1.Items.Add(item)
            Next file
     
            ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
     
        End Sub
     
        'Selection des checkbox avec heritage aux sous dossiers:
        Private Sub CheckAllChildNodes(TreeNode As TreeNode, nodeChecked As Boolean)
            Dim node As TreeNode
            For Each node In TreeNode.Nodes
                node.Checked = nodeChecked
                If node.Nodes.Count > 0 Then
                    'Si le nœud actuel possède des nœuds enfant, appelez la méthode CheckAllChildsNodes récursive.  
                    Me.CheckAllChildNodes(node, nodeChecked)
                End If
            Next (node)
        End Sub
        Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterCheck
            'Le code s'exécute uniquement si l'utilisateur a provoqué l'état activé au changement .  
            If e.Action <> TreeViewAction.Unknown Then
                If e.Node.Nodes.Count > 0 Then
                    'Appelle la méthode de CheckAllChildNodes, en passant dans le courant   
                    'valeur Analyse du TreeNode dont vérifié l'état changé.   
                    Me.CheckAllChildNodes(e.Node, e.Node.Checked)
                End If
            End If
        End Sub
     
        Private Sub treeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
            'affiche dans lbSélection les items de treeview1 qui seront "checké"
            If e.Node.Checked Then ListBox1.Items.Add(e.Node.FullPath)
     
            'efface dans ListBox1 les items de TreeView1 qui seront "déchecké"
            If e.Node.Checked = False Then ListBox1.Items.Remove(e.Node.FullPath)
        End Sub
    Merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2013
    Messages : 40
    Points : 23
    Points
    23
    Par défaut
    Bon j'ai trouvé une solution:
    J'ai gardé l'héritage des checkbox et je rempli la listbox en double-cliquant sur le dossier voulu avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub treeView1_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseDoubleClick
                    ListBox1.Items.Add(e.Node.FullPath)
        End Sub
    Sauf que lorsque je double-cliquais, le nœud se déployai.
    J'ai donc rajouté le code suivant qui "repli" (collapse):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeView1.SelectedNode.Collapse()
    Ça fonctionne très bien, le noeud se déploie et se repli en une fraction de seconde, c'est juste pas "Hyper clean".
    Je vais donc faire avec mais si quelqu'un a une solution plus "clean" je suis preneur.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/02/2008, 09h06
  2. [C#] Sélection clic droit TreeView
    Par fremsoi dans le forum Windows Forms
    Réponses: 4
    Dernier message: 16/01/2006, 23h37
  3. [Débutant] Sélection multiples dans une Listbox
    Par eraim dans le forum Access
    Réponses: 4
    Dernier message: 15/10/2005, 03h21
  4. Sélection dans une ListBox
    Par LoicH dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/04/2005, 22h13
  5. Récupérer la sélection d'un TreeView
    Par nostroyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 16/06/2003, 12h30

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