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 :

[vb.net] [treeview] comment trier les nodes


Sujet :

Windows Forms

  1. #1
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut [vb.net] [treeview] comment trier les nodes
    Bonjour,

    Je souhaite réordonner mes root nodes seulement, donc myTree.Nodes.

    J'ai stocké ces nodes dans un ArrayList et a présent je souhaiterais le trier en fonction de l'entier stocké dans la propriété .Tag de mes nodes.

    Ensuite il me suffira de reconstruire le tree a partir des nodes réordonnés dans l'ArrayList.

    En fait je ne comprends pas tres bien comment utiliser l'interface ICompare pour faire ca. Pouvez vous me donner un exemple correspondant a mes besoins?
    Merci

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    ton élément doit implémenter l'interface "Implements IComparable"

    et apres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Public Overridable Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
            If Me.mapropriété = DirectCast(obj, CDocument).mapropriété Then
    ...
            End If
        End Function

  3. #3
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Quel élément?
    Pourrais tu me donner l'exemple complet pour trier mon ArrayList? Je ne suis pas sur d'avoir compris.

  4. #4
    Membre actif Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Points : 296
    Points
    296
    Par défaut Re: [vb.net] [treeview] comment trier les nodes
    Salut,
    une petite question un peu bête :
    pourquoi ne pas utiliser une SortedList qui prendrait en Key l'entier des .Tag ?
    A condition de ne pas avoir plusieurs fois le même entier.
    Pensez aux règles et au qui rime avec !

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Je suppose que tu veux parler de IComparer
    Si tu bosses toujours sur 2.0 tu pourrais eventuellement remplacer ton ArrayList par un List(Of TreeNode) te permettant d'implementer directement la méthode Compare qui te renverra en comparant les Tags trantypés en int : =0, <0, >0
    Utilisation de la méthode List.Sort

    La suggestion de toniolol n'est pas ininterressante aussi
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    Citation Envoyé par neguib
    Je suppose que tu veux parler de IComparer
    Si tu bosses toujours sur 2.0 tu pourrais eventuellement remplacer ton ArrayList par un List(Of TreeNode) te permettant d'implementer directement la méthode Compare qui te renverra en comparant les Tags trantypés en int : =0, <0, >0
    Utilisation de la méthode List.Sort

    La suggestion de toniolol n'est pas ininterressante aussi
    C'est sur Sort que je bloque :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim lstNodes As List(Of TreeNode)
            For Each n As TreeNode In tv.Nodes
                lstNodes.Add(n)
            Next
            lstNodes.Sort(AddressOf CompareNodesByTag)
     
          Private Shared Function CompareNodesByTag( ??? )  As Integer
     
          End Function
    Comment spécifier que c'est sur le tag que je veux trier? Et encore... c'est meme pas sur le tag, c'est sur la propriété Sort de l'objet contenu dans le Tag

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Essayes plutôt ceci
    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
     
    Imports System
    Imports System.Collections
    Imports System.Collections.Generic
    Imports System.Windows.Forms
     
    Public Class NodesList
       Inherits List(Of TreeNode)
     
       Public  Overloads Sub Sort()
          MyBase.Sort(New NodeComparer())
       End Sub
    End Class
     
    Public Class NodeComparer
       Implements IComparer(Of TreeNode)
     
       Public Function Compare (node1 As TreeNode, node2 As TreeNode) As Integer Implements IComparer(Of TreeNode).Compare
          Return (CType(node1.Tag, Int32).CompareTo(CType(node2.Tag, int32)))
       End Function
    End Class
    Excuses je n'ai pas le temps de tester, je l'ai pondu à la volée
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre éprouvé Avatar de graphicsxp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    758
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2004
    Messages : 758
    Points : 1 022
    Points
    1 022
    Par défaut
    code non testé hein ?
    ca marche plutot bien pour du code non testé

    Merci infiniment !

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par graphicsxp
    code non testé hein ?
    ca marche plutot bien pour du code non testé

    Merci infiniment !
    Ben j'en suis content, je commence à devenir bon alors j'ai déjà les chevilles qui gonflent
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 23/05/2006, 16h52
  2. Réponses: 13
    Dernier message: 18/01/2006, 12h51
  3. Réponses: 5
    Dernier message: 28/11/2005, 09h52
  4. Réponses: 5
    Dernier message: 25/07/2005, 09h29

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