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

Windows Forms Discussion :

Organiser un TreeView


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Organiser un TreeView
    Bonjour

    Voilà mon problème.
    j'ai un tableau qui contient des chaines de caractères séparées par des "." Chaque point est un élément du node.
    Mon code ci dessous donne le résultat suivant :

    a
    +--b
    +---c
    +----d
    a
    +--f
    +---g
    +----h
    a
    +--i
    +---g
    +----h
    b
    +--f
    +---g
    +-----h

    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
    Public Class Form1
        Dim _Alias(3) As String
        Dim NodeParent As New TreeNode
     
        Public Sub New()
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            NodeParent = TV2.Nodes.Add("Racine")
        End Sub
     
        Private Sub BtnAdd_Click(sender As Object, e As EventArgs) Handles BtnAdd.Click
            Add_Value()
        End Sub
     
        Private Sub Add_Value()
            Try
                _Alias(0) = "a.b.c.d"
                _Alias(1) = "a.f.g.h"
                _Alias(2) = "a.i.g.h"
                _Alias(3) = "b.f.g.h"
                For nb As Integer = 0 To _Alias.Length - 1
     
                    Dim Ret() As String = Split(_Alias(nb), ".")
                    If Ret IsNot Nothing Then
     
                        For i As Integer = 0 To Ret.Length - 1
                            Dim nod As TreeNode = New TreeNode
                            nod.Name = Ret(i)
                            nod.Text = Ret(i)
                            nod.Tag = Ret(i)
                            TV2.SelectedNode.Nodes.Add(nod)
                            TV2.SelectedNode = nod
                        Next
                        TV2.SelectedNode = NodeParent
                        TV2.SelectedNode.BackColor = Color.Red
                    End If
                Next
            Catch ex As Exception
                'Gestion des erreur
                Debug.Print(ex.Message)
            End Try
        End Sub
     
        Private Function BacktoRoot(e As TreeNode) As TreeNode
            If e.Parent IsNot Nothing Then
                MessageBox.Show("parent node : " & vbLf + e.Parent.Text)
                BacktoRoot(e.Parent)
                Return Nothing
            Else
                MessageBox.Show("root: " & vbLf + e.Text)
                Return e
            End If
        End Function
     
    End Class
    je cherche a voir comment faire pour mettre en forme comme ci dessous je veux que tout ce qui commence par la même chaine soit regroupé (ne pas dupliquer le "a" dans mon exemple)

    a
    +--b
    +---c
    +----d
    +--f
    +---g
    +----h
    +--i
    +---g
    +----h
    b
    +--f
    +---g
    +-----h

    Existe t'il une méthode ?
    Merci d'avance
    Olivier

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Bonjour pas directement.

    Ce post ne concerne pas directement le control TreeView mais c'est plutôt un algorithme dont tu as besoin.
    Par contre tu est en vb et moi en c# je ne sais pas si un exemple t'aidera.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici comment je procéderai.

    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
                List<string> lst = new List<string>();
                lst.Add("a.b.c.d");
                lst.Add("a.f.g.h");
                lst.Add("a.f.g.i");
                lst.Add("b.f.g.h");
     
     
                TreeNodeCollection TRC;
                foreach (string item in lst)
                {
                    TRC = treeView1.Nodes;
                    foreach (string str in item.Split('.'))
                    {
                        if (TRC.Find(str, false).Count() == 1)
                            TRC = TRC.Find(str, false)[0].Nodes;
                        else
                        {
                            TreeNode TN = new TreeNode(str) { Name = str };
                            TRC.Add(TN);
                            TRC = TN.Nodes;
                        }
                    }
                }

    Résultat :
    Nom : Sans titre.png
Affichages : 162
Taille : 1,5 Ko

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Merci, c'est royal c'est tout à fait ce que je cherchais à faire.
    Pour ceux qui voudrait le code en VB.net


    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
    Sub TreeView_View()
            Try
                Dim lst As New List(Of String)()
                lst.Add("a.b.c.d.m")
                lst.Add("a.f.g.h")
                lst.Add("a.f.g.i")
                lst.Add("b.f.g.h")
     
     
                Dim TRC As TreeNodeCollection
                For Each item As String In lst
                    TRC = TreeView1.Nodes
                    For Each str As String In item.Split(".")
                        If TRC.Find(str, False).Count() = 1 Then
                            TRC = TRC.Find(str, False)(0).Nodes
                        Else
                            Dim TN As New TreeNode(str) With {.Name = str}
                            TRC.Add(TN)
                            TRC = TN.Nodes
                        End If
                    Next
                Next
            Catch ex As Exception
                'Gestion des erreurs
                Debug.Print(ex.Message)
            End Try
        End Sub
    Merci

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Juste une question, pourquoi le try/catch tu as des erreurs ou juste par précaution ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Non ça marche parfaitement, le Try c'est juste une mesure de précaution, un réflexe pour pouvoir debuger le code
    Merci

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le principe d'un bug c'est qu'il n'est pas prévu
    de plus certains bug se produisent à une date données, ou lorsque les paramètres ont une valeur précise ; chose peu prévisible

    aussi il est important de mettre des try catch partout (ou presque), avec un log de l'erreur (avec le type d'erreur, la pile des appels, et pourquoi pas les valeurs de certaines variables)
    en cas de problème ca permet de comprendre ce qui c'est passé et de corriger le bug très rapidement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. Organisation d'un treeview
    Par Gabout dans le forum Access
    Réponses: 4
    Dernier message: 04/08/2006, 18h18
  3. où y a t il un tutorial pour le Treeview ??
    Par silvermoon dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h30
  4. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

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