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 :

Parents / Enfants , énumération : TreeView


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de New World
    Homme Profil pro
    Commandant croisière
    Inscrit en
    Juillet 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Commandant croisière
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 132
    Par défaut Parents / Enfants , énumération : TreeView
    Bonjour à tous !
    J'ai 2 choses que j'aimerais savoir sur les TreeView ;-)
    Explication :
    (1)J'ai une TreeView , imaginons que j'ai 3 nœud "parents" avec chacun 3 nœud "enfants".
    Le premier nœud parent se nomme "Pomme"
    Le second nœud parent se nomme "Citron"
    Le troisième nœud parent se nomme "Orange"
    [-]Pomme
    |___Enfant 1
    |___Enfant 2
    |___Enfant 3
    [-]Citron
    |___Enfant 1
    |___Enfant 2
    |___Enfant 3
    [-]Orange
    |___Enfant 1
    |___Enfant 2
    |___Enfant 3
    Je voudrais que quand on double clique sur un des Enfants de parent "Pomme" ça affiche form1.
    Sur un des enfants de parent "Citron" ça affiche Form 2.
    Sur un des enfants de parent "Orange" ça affiche Form 3.
    Que ça affiche une form.VB différente en fonction des parents ;-)
    (2) Je voudrais énumérer le nom des enfants lors de leurs créations , et éventuellement procéder à un système de fichiers :-)
    Merci beaucoup !
    PS: Comment renommer un enfant directement sur son item et nom par une autre fenêtre ?
    ( )

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Dans un 1er temps il faut bien faire le distingo entre créer un treeview :

    - statique : les éléments sont connus dès le départ (noeuds parents et enfants) comme tu le présentes dans ton exemple
    - dynamique : tu ne connais pas la future arborescence ou toutes les dimensions, comme l'énumération de dossiers et fichiers système

    Réponse 1 & 2 (pas compris ta requête d’énumération à la création ..o_O) :

    Lorsque tu cliqueras sur n'importe quel noeuds cet événement sera déclenché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
    End Sub
    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
     
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'On définie le noeuds principal : Fruits
            Dim FirstNode As New TreeNode("Fruits")
            'On déplie le contenu du noeuds
            FirstNode.ExpandAll()
            'On créé un tableau de string
            Dim Fruits As String() = New String() {"Pomme", "Citron", "Orange"}
            'On parcours le tableau pour instancier les noeuds respectifs 
            For i As Integer = 0 To Fruits.Count - 1
                Dim pNode As New TreeNode(Fruits(i))
                'On déplie le contenu du noeuds
                pNode.ExpandAll()
                'On sait qu'il y a 3 enfants dans chaque type de fruit alors on boucle sur 3 = 0 à 2
                For j As Integer = 0 To 2
                    Dim eNode As New TreeNode("Enfant " & (j + 1).ToString)
                    'On ajoute le noeuds enfant à son parent respectif
                    pNode.Nodes.Add(eNode)
                Next
                'On ajoute le noeuds enfant à son parent respectif = le noeuds principal (Fruits)
                FirstNode.Nodes.Add(pNode)
            Next
            'On ajoute le noeuds principal au treeview
            TreeView1.Nodes.Add(FirstNode)
        End Sub
     
     
        Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
            Dim Node = e.Node.Parent
            'On test si le noeuds sur lequel on a cliqué n'est pas le noeuds principal auquel cas il n'a pas de parent donc ca pourrait générer une exception !!!
            If Node IsNot Nothing Then
                Select Case Node.Text
                    Case "Pomme"
                        MsgBox(Node.FullPath)
                    Case "Citron"
                        MsgBox(Node.FullPath)
                    Case "Orange"
                        MsgBox(Node.FullPath)
                End Select
            End If
        End Sub
    Réponse 3 :

    1- Tu te rends dans les propriétés de ton contrôle Treeview et tu passe la propriété ".EditLabel" à True
    2- Lorsque l'utilisateur entrera sur l'étiquette d'un noeuds, cet événement se déclenchera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TreeView1_BeforeLabelEdit(sender As Object, e As NodeLabelEditEventArgs) Handles TreeView1.BeforeLabelEdit
     
    End Sub
    3- Lorsqu'il quittera l'étiquette c'est celui-ci qui sera déclenché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TreeView1_AfterLabelEdit(sender As Object, e As NodeLabelEditEventArgs) Handles TreeView1.AfterLabelEdit
     
    End Sub
    NB : A toi de gérer les scénarios appropriés, à savoir gestion des doublons dans le même noeuds parent...etc......


    IMPORTANT : Lorsqu'on souhaite utiliser un contrôle qu'on ne maîtrise pas il ne faut pas hésiter à parcourir ses propriétés et ses événements depuis la fenêtre des propriétés :



    A+

  3. #3
    Membre confirmé Avatar de New World
    Homme Profil pro
    Commandant croisière
    Inscrit en
    Juillet 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Commandant croisière
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 132
    Par défaut
    Merci :-)
    Mais , les nœuds parents sont déjà créé , c'est les enfants que l'utilisateur créer , modifie , supprime ...
    C'est le même principe que le logiciel game maker ;-)
    Pour l'énumération , en fait , c'est quand l'utilisateur créé un enfant il se nomme "enfant 1" puis le second ensuite "enfant 2" c'est le chiffre qui change et qui augmente .

    C'est ça : https://youtu.be/or-NaUaqbRI

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Il faut donc dans un premier temps déterminer de quelle manière tu souhaites que l'utilisateur créé/modifie/supprime les noeuds enfants (sinon tu ne pourras as mettre en place le raisonnement) :

    - Menu contextuel au clique droit (ContextMenuStrip) sur le noeuds parent pour la création et noeuds enfant pour la suppression et modification
    - Bouton Créer, Modifier, Supprimer dans une barre de menu (ex : ToolStrip)

    Lorsque tu auras définies le comportement il te faudra alors te familiariser avec l'utilisation de ses contrôles dans des sortes de mini projets.

    Pour savoir quel sera le prochain nom incrémentiel du noeuds enfant (il y a certainement mieux à faire mais ça reste une possibilité) :

    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
     
      Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
            Select Case e.Node.Text
                Case "Pomme"
                    CreateChildNode(e.Node)
                Case "Citron"
                    CreateChildNode(e.Node)
                Case "Orange"
                    CreateChildNode(e.Node)
            End Select
        End Sub
     
        Private Sub CreateChildNode(Parent As TreeNode)
            Dim num = Parent.Nodes.Count
            Dim nodeCreated As Boolean = False
            For i As Integer = 0 To num - 1
                If Not Parent.Nodes(i).Text.EndsWith((i + 1).ToString) Then
                    Dim cNode As New TreeNode((i + 1).ToString)
                    Parent.Nodes.Add(cNode)
                    nodeCreated = True
                    Exit For
                End If
            Next
            If nodeCreated = False Then
                Dim cNode As New TreeNode("Enfant " & (num + 1).ToString)
                Parent.Nodes.Add(cNode)
            End If
        End Sub
    ---> Voilà comment associer un ContextMenuStrip à un noeuds en reprenant mon exemple initial :

    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
     
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'On définie le noeuds principal : Fruits
            Dim FirstNode As New TreeNode("Fruits")
            'On déplie le contenu du noeuds
            FirstNode.ExpandAll()
            'On créé un tableau de string
            Dim Fruits As String() = New String() {"Pomme", "Citron", "Orange"}
            'On parcours le tableau pour instancier les noeuds respectifs 
            For i As Integer = 0 To Fruits.Count - 1
                Dim pNode As New TreeNode(Fruits(i))
                'Il faut au préalable ajouter un contrôle ContextMenuStrip depuis la boite à outils en mode concepteur de vues puis créer un item nommé "Créer" (car c'est la racine des noeuds enfant)
                pNode.ContextMenuStrip = ContextMenuStrip1
                'On déplie le contenu du noeuds
                pNode.ExpandAll()
                'On sait qu'il y a 3 enfants dans chaque type de fruit alors on boucle sur 3 = 0 à 2
                For j As Integer = 0 To 2
                    Dim eNode As New TreeNode("Enfant " & (j + 1).ToString)
                    'Il faut au préalable ajouter un contrôle ContextMenuStrip depuis la boite à outils en mode concepteur de vues puis créer un item nommé "Modifier" et "Supprimer" (car c'est un noeuds enfant)
                    eNode.ContextMenuStrip = ContextMenuStrip2
                    'On ajoute le noeuds enfant à son parent respectif
                    pNode.Nodes.Add(eNode)
                Next
                'On ajoute le noeuds enfant à son parent respectif = le noeuds principal (Fruits)
                FirstNode.Nodes.Add(pNode)
            Next
            'On ajoute le noeuds principal au treeview
            TreeView1.Nodes.Add(FirstNode)
        End Sub
    Ensuite tu doubles cliques en mode concepteur de vues sur l'item Créer Modifier et Supprimer afin de générer le code source associé aux événements puis tu ajoutes dans le corps les appels :

    - un formulaire ou boite de dialogue pour Créer (avec champs du nom et une méthode de vérification d'existence du nom choisi par l'utilisateur)
    - un formulaire pour Modifier (le constructeur Sub new devra contenir les arguments nom enfant et nom parent pour les afficher dans les champs) et une méthode de vérification d'existence du nom choisi par l'utilisateur
    - une boite de dialogue qui demande la confirmation de suppression !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Private Sub Creer_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem.Click
        End Sub
     
        Private Sub Modifier_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click
        End Sub
     
        Private Sub Supprimer_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click
        End Sub
    Pour ce qui est de l'implémentation du reste, c'est à toi d'être imaginatif !

    EDIT : je viens de voir ta vidéo, très simpliste en soi et ce qui revient à mon intervention supra dans ce message .

    A+

  5. #5
    Membre confirmé Avatar de New World
    Homme Profil pro
    Commandant croisière
    Inscrit en
    Juillet 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Commandant croisière
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 132
    Par défaut
    Merci beaucoup !
    Mais clairement , pour associer un nœud à un contextmenustrip c'est lequel de tes 2 codes ? :-)
    C'est une bonne solution comme ça si par exemple j'ai 3 menu strip pour 3 nœud je peux faire du code différent pour les 3 nœuds. Mais comment :-) ?

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par New World Voir le message
    Merci beaucoup !
    Mais clairement , pour associer un nœud à un contextmenustrip c'est lequel de tes 2 codes ? :-)
    Il te suffit de lire, c'est commenté et la procédure est décrite avec un titre en gras !

    Citation Envoyé par New World Voir le message
    C'est une bonne solution comme ça si par exemple j'ai 3 menu strip pour 3 nœud je peux faire du code différent pour les 3 nœuds. Mais comment :-) ?
    Pourquoi voudrais-tu avoir 3 ContextMenuStrip ??? o_O

    Je considère selon ton post initial :

    ---> 3 noeuds parents portants le nom d'un fruit : Pomme, Citron, Orange

    Depuis chacun de ses noeuds tu peux créer un noeuds enfant donc tu importes 1 contrôle ContextMenuStrip1 sur ton formulaire principal. Dans ce ContextMenuStrip tu ajoutes un item de type ToolStripMenuItem nommé "Créer" et tu doubles-cliques sur cet item pour générer le code et y placer l'appel d'un formulaire de création de noeuds enfant.

    ---> Tu ajoutes 1 autre contrôle ContextMenuStrip2 sur ton formulaire principal. Dans ce ContextMenuStrip tu ajoutes 2 items de type ToolStripMenuItem nommé "Modifier" et "Supprimer". Lorsque l'utilisateur créera un noeuds enfant il faudra associé ce ContextMenuStrip2 programmatiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim eNode As New TreeNode("Enfant 2")
    eNode.ContextMenuStrip = ContextMenuStrip2
    FINALITE : Tu n'as que 2 contrôles ContextMenuStrip dans ton projet

    A+

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2014, 00h19
  2. Treeview parent/enfant récupérer index
    Par miky77 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/07/2011, 15h11
  3. Treeview : gestion parent/enfant
    Par Masmeta dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/12/2010, 22h52
  4. [AC-2003] Treeview problème Parent / Enfant
    Par lio33 dans le forum IHM
    Réponses: 2
    Dernier message: 10/02/2010, 21h51
  5. Recuperer les enfants d'un noeud parent dans un treeview
    Par skunkies dans le forum Windows Forms
    Réponses: 8
    Dernier message: 20/01/2009, 15h31

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