begin process at 2012 05 24 00:37:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST.FINDALL)

GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST.FINDALL)


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous :Listes, Trier, Ranger, Filtrer, Afficher Niveau :Débutant Date de création :08/08/2010 Date de mise à jour :08/08/2010 11:19:21 Vu / téléchargé :3 107 / 330

Auteur : kbalist

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Petit programme (VB 2008) qui remplace les discours à l'usage des novices pour utiliser pleinement les possibilités des listes (Sort et FindAll).

La liste utilisée est une liste de Fiches (Nom, Prénom, Age, Ville, Département) qu'on classe à volonté par nom, prénom, age, ville, département où qu'on filtre pour ne garder que les fiches des bourguignons.

Source

  • Imports System.Windows.Forms.Application 'pour DoEvents()
  • Public Class Form1
  • Structure Fiche
  • Dim Nom As String
  • Dim Prénom As String
  • Dim Age As Integer
  • Dim Dép As Integer
  • Dim Ville As String
  • Public Sub New(ByVal n As String, ByVal p As String, ByVal a As Integer, ByVal d As Integer, ByVal v As String)
  • Me.Nom = n
  • Me.Prénom = p
  • Me.Age = a
  • Me.Dép = d
  • Me.Ville = v
  • End Sub 'constructeur d'une nouvelle fiche
  • End Structure 'fiche d'ID pour les essais, avec constructeur NEW
  • 'variables globales
  • Dim LF As New List(Of Fiche) 'liste des Fiches à classer
  • Dim LFT As New List(Of Fiche) 'liste des Fiches triées ou filtrées (qui seront affichées)
  • 'boutons :
  • Private Sub ButtonNoms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNoms.Click
  • 'tri par nom
  • RecopieListeLF()
  • LFT.Sort(AddressOf CompareNoms)
  • ActualiseListBox()
  • End Sub 'tri de la liste LFT par nom
  • Private Sub ButtonPrénoms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrénoms.Click
  • 'tri par prénom
  • RecopieListeLF()
  • LFT.Sort(AddressOf ComparePrénoms)
  • ActualiseListBox()
  • End Sub 'tri de la liste LFT par prénom
  • Private Sub ButtonAges_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAges.Click
  • 'tri par age
  • RecopieListeLF()
  • LFT.Sort(AddressOf CompareAges)
  • ActualiseListBox()
  • End Sub 'tri de la liste LFT par age
  • Private Sub ButtonVilles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonVilles.Click
  • 'tri par ville
  • RecopieListeLF()
  • LFT.Sort(AddressOf CompareVilles)
  • ActualiseListBox()
  • End Sub 'tri de la liste LFT par ville
  • Private Sub ButtonDepartements_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDepartements.Click
  • 'tri par département
  • RecopieListeLF()
  • LFT.Sort(AddressOf CompareDépartements)
  • ActualiseListBox()
  • End Sub 'tri de la liste LFT par département
  • Private Sub ButtonFiltre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFiltre.Click
  • 'filtrer la liste en ne gardant que les départements de Bourgogne (21,71,89,58)
  • LFT.Clear()
  • LFT = LF.FindAll(AddressOf FiltreBourgogne) 'ne garde que les éléments qui conviennent
  • ActualiseListBox()
  • End Sub 'filtrer la liste en ne gardant que les départements de Bourgogne (21,71,89,58)
  • 'fonctions :
  • Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • 'initialisation des fiches et des listes :
  • Dim f, g, h, i, j As Fiche
  • 'on pourrait écrire LF.Add(New Fiche("Térieur", "Alex", 21, 71, "Chalon")) mais cela risque d'entrainer
  • 'des fuites de mémoire...car il semble que la mémoire de la nouvelle fiche ne soit pas libérée si NEW est
  • 'un paramètre d'une fonction
  • f = New Fiche("Térieur", "Alex", 21, 71, "Chalon")
  • LF.Add(f)
  • g = New Fiche("Térieur", "Alain", 22, 25, "Besançon")
  • LF.Add(g)
  • h = New Fiche("Enfaillite", "Mélusine", 58, 89, "Sens")
  • LF.Add(h)
  • i = New Fiche("Marollex", "Eléonore", 15, 75, "Paris")
  • LF.Add(i)
  • j = New Fiche("Fonfec", "Sophie", 48, 39, "Saint-Claude")
  • LF.Add(j)
  • RecopieListeLF() ' recopie dans LFT
  • ActualiseListBox() 'au début, la liste LFT n'est pas triée...elle est identique à LF
  • End Sub
  • Private Sub RecopieListeLF()
  • 'recopie la liste LF dans la liste LFT
  • Dim i As Integer
  • LFT.Clear()
  • For i = 0 To LF.Count - 1
  • LFT.Add(LF(i))
  • Next
  • End Sub
  • Private Sub ActualiseListBox()
  • 'permet l'affichage de la liste LFT
  • Dim i As Integer
  • ListBoxFiches.Items.Clear()
  • For i = 0 To LFT.Count - 1
  • ListBoxFiches.Items.Add(LFT(i).Prénom & ", " & _
  • LFT(i).Nom & ", " & _
  • CStr(LFT(i).Age) & " ans, " & _
  • LFT(i).Ville & ", " & _
  • CStr(LFT(i).Dép))
  • Next
  • ListBoxFiches.Refresh()
  • DoEvents()
  • End Sub 'permet de rafraichir l'affichage de la liste LFT dans le ListBox
  • Private Function CompareNoms(ByVal f As Fiche, ByVal g As Fiche) As Integer
  • 'retour : 0 si chaines égales
  • ' : -1 si f.nom < g.nom
  • ' : +1 si f.nom > g.nom
  • Return String.Compare(f.Nom, g.Nom)
  • End Function
  • Private Function ComparePrénoms(ByVal f As Fiche, ByVal g As Fiche) As Integer
  • ' mêmes conditions de retour
  • Return String.Compare(f.Prénom, g.Prénom)
  • End Function
  • Private Function CompareVilles(ByVal f As Fiche, ByVal g As Fiche) As Integer
  • ' mêmes conditions de retour
  • Return String.Compare(f.Ville, g.Ville)
  • End Function
  • Private Function CompareAges(ByVal f As Fiche, ByVal g As Fiche) As Integer
  • 'retour : 0 si ages égaux
  • ' : -1 si f.age < g.age
  • ' : +1 si f.age > g.age
  • Return IIf(f.Age = g.Age, 0, IIf(f.Age < g.Age, -1, 1))
  • End Function
  • Private Function CompareDépartements(ByVal f As Fiche, ByVal g As Fiche) As Integer
  • Return IIf(f.Dép = g.Dép, 0, IIf(f.Dép < g.Dép, -1, 1))
  • End Function
  • Private Function FiltreBourgogne(ByVal f As Fiche) As Boolean
  • If f.Dép = 21 Or f.Dép = 71 Or f.Dép = 58 Or f.Dép = 89 Then
  • Return True 'à garder
  • Else
  • Return False 'à laisser
  • End If
  • End Function
  • End Class
Imports System.Windows.Forms.Application 'pour DoEvents()

Public Class Form1

    Structure Fiche
        Dim Nom As String
        Dim Prénom As String
        Dim Age As Integer
        Dim Dép As Integer
        Dim Ville As String
        Public Sub New(ByVal n As String, ByVal p As String, ByVal a As Integer, ByVal d As Integer, ByVal v As String)
            Me.Nom = n
            Me.Prénom = p
            Me.Age = a
            Me.Dép = d
            Me.Ville = v
        End Sub 'constructeur d'une nouvelle fiche
    End Structure 'fiche d'ID pour les essais, avec constructeur NEW

    'variables globales
    Dim LF As New List(Of Fiche) 'liste des Fiches à classer
    Dim LFT As New List(Of Fiche) 'liste des Fiches triées ou filtrées (qui seront affichées)

    'boutons :
    Private Sub ButtonNoms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNoms.Click
        'tri par nom
        RecopieListeLF()
        LFT.Sort(AddressOf CompareNoms)
        ActualiseListBox()
    End Sub 'tri de la liste LFT par nom
    Private Sub ButtonPrénoms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrénoms.Click
        'tri par prénom
        RecopieListeLF()
        LFT.Sort(AddressOf ComparePrénoms)
        ActualiseListBox()
    End Sub 'tri de la liste LFT par prénom
    Private Sub ButtonAges_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAges.Click
        'tri par age
        RecopieListeLF()
        LFT.Sort(AddressOf CompareAges)
        ActualiseListBox()
    End Sub 'tri de la liste LFT par age
    Private Sub ButtonVilles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonVilles.Click
        'tri par ville
        RecopieListeLF()
        LFT.Sort(AddressOf CompareVilles)
        ActualiseListBox()
    End Sub 'tri de la liste LFT par ville
    Private Sub ButtonDepartements_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDepartements.Click
        'tri par département
        RecopieListeLF()
        LFT.Sort(AddressOf CompareDépartements)
        ActualiseListBox()
    End Sub 'tri de la liste LFT par département
    Private Sub ButtonFiltre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFiltre.Click
        'filtrer la liste en ne gardant que les départements de Bourgogne (21,71,89,58)
        LFT.Clear()
        LFT = LF.FindAll(AddressOf FiltreBourgogne) 'ne garde que les éléments qui conviennent
        ActualiseListBox()
    End Sub 'filtrer la liste en ne gardant que les départements de Bourgogne (21,71,89,58)

    'fonctions :
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'initialisation des fiches et des listes :
        Dim f, g, h, i, j As Fiche

        'on pourrait écrire LF.Add(New Fiche("Térieur", "Alex", 21, 71, "Chalon")) mais cela risque d'entrainer
        'des fuites de mémoire...car il semble que la mémoire de la nouvelle fiche ne soit pas libérée si NEW est
        'un paramètre d'une fonction

        f = New Fiche("Térieur", "Alex", 21, 71, "Chalon")
        LF.Add(f)

        g = New Fiche("Térieur", "Alain", 22, 25, "Besançon")
        LF.Add(g)

        h = New Fiche("Enfaillite", "Mélusine", 58, 89, "Sens")
        LF.Add(h)

        i = New Fiche("Marollex", "Eléonore", 15, 75, "Paris")
        LF.Add(i)

        j = New Fiche("Fonfec", "Sophie", 48, 39, "Saint-Claude")
        LF.Add(j)

        RecopieListeLF() ' recopie dans LFT
        ActualiseListBox() 'au début, la liste LFT n'est pas triée...elle est identique à LF
    End Sub
    Private Sub RecopieListeLF()
        'recopie la liste LF dans la liste LFT
        Dim i As Integer

        LFT.Clear()
        For i = 0 To LF.Count - 1
            LFT.Add(LF(i))
        Next
    End Sub
    Private Sub ActualiseListBox()
        'permet l'affichage de la liste LFT
        Dim i As Integer

        ListBoxFiches.Items.Clear()

        For i = 0 To LFT.Count - 1
            ListBoxFiches.Items.Add(LFT(i).Prénom & ", " & _
                                    LFT(i).Nom & ", " & _
                                    CStr(LFT(i).Age) & " ans, " & _
                                    LFT(i).Ville & ", " & _
                                    CStr(LFT(i).Dép))
        Next
        ListBoxFiches.Refresh()
        DoEvents()
    End Sub 'permet de rafraichir l'affichage de la liste LFT dans le ListBox
    Private Function CompareNoms(ByVal f As Fiche, ByVal g As Fiche) As Integer
        'retour : 0 si chaines égales
        '       : -1 si f.nom < g.nom
        '       : +1 si f.nom > g.nom
        Return String.Compare(f.Nom, g.Nom)
    End Function
    Private Function ComparePrénoms(ByVal f As Fiche, ByVal g As Fiche) As Integer
        ' mêmes conditions de retour
        Return String.Compare(f.Prénom, g.Prénom)
    End Function
    Private Function CompareVilles(ByVal f As Fiche, ByVal g As Fiche) As Integer
        ' mêmes conditions de retour
        Return String.Compare(f.Ville, g.Ville)
    End Function
    Private Function CompareAges(ByVal f As Fiche, ByVal g As Fiche) As Integer
        'retour : 0 si ages égaux
        '       : -1 si f.age < g.age
        '       : +1 si f.age > g.age
        Return IIf(f.Age = g.Age, 0, IIf(f.Age < g.Age, -1, 1))
    End Function
    Private Function CompareDépartements(ByVal f As Fiche, ByVal g As Fiche) As Integer
        Return IIf(f.Dép = g.Dép, 0, IIf(f.Dép < g.Dép, -1, 1))
    End Function

    Private Function FiltreBourgogne(ByVal f As Fiche) As Boolean
        If f.Dép = 21 Or f.Dép = 71 Or f.Dép = 58 Or f.Dép = 89 Then
            Return True 'à garder
        Else
            Return False 'à laisser
        End If
    End Function

End Class

 Conclusion

C'est uniquement pédagogique...!

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 août 2010 11:19:21 :
Précision : code pour VB 2008

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) APPRENDRE À RÉSOUDRE UN SUDOKU
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE CODE POUR DIFFÉRENTS LANGAGES
Source avec Zip Source avec une capture Source .NET (Dotnet) ECRITURE D'UN MOT AVEC PATH.ADDSTRING
Source avec Zip Source avec une capture Source .NET (Dotnet) AFFICHER UN TEXTE OU DES RECTANGLES, ELLIPSES, POLYGONES, ET...

 Sources de la même categorie

ENUM TYPE POUR JAVASCCRIPT par triumphs
Source avec Zip DLL PERSONNALISÉ AVEC ÉVÈNEMENTS ET PROPRIÉTÉS EN VB6. par Number7
Source avec Zip Source .NET (Dotnet) EXEMPLE DU TUTORAIL "CLASSES MÉTIER" par Adn56
Source avec Zip EXEMPLE SUR LES MENUS POUR AIDER LES DÉBUTANTS COMME MOI ;-) par viragoloco
LES OPÉRATIONS DE LA LISTE CHAINÉE par smaili

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture LIST DES IMAGES AVEC BASE DE DONNÉES ET REPERTOIR D'IMAGE par yannickcephas
Source avec Zip Source avec une capture Source .NET (Dotnet) PILOTER UN WALLBOARD IP ALCATEL par mays
Source avec Zip Source .NET (Dotnet) MANIPULER LES CHAÎNES ET TRIER UNE LISTE DE NOMS par Lisa46
Source avec Zip Source avec une capture YM_BASE - BASE DE DONNEES par ym_trainz
Source avec Zip Source avec une capture GESTION DES STOCKS par olive30000

Commentaires et avis

Commentaire de mimiZanzan le 13/08/2010 17:01:58

Bonjour,
Ce n'est pas pour les si novices que çà!
En tout cas, code très utile et très bien structuré, compréhensible malgré que je ne sois pas très familier du VB 2008 (je suis resté au bon vieux VB6...)
Cdt

Commentaire de PascalCmoa le 10/02/2011 17:05:39

Bonjour,

Ne serai-t'il pas plus simpl d'utiliser le Linq pour trier les listes ??

Je fais cela, en C#, et le tri se fait de façon assez simple avec les requètes Linq.

A plus

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

filtrer les données à afficher dans un form [ par jeff_11 ] Bonjour,Je passe de VBA à VB et je voudrais n'afficher qu'une partie de ma table access dans un formulaire. Par exemple : tous les hommes d'une liste Filtrer un datatable dans VB2005 [ par bename ] Bonjour, Je travail sur vb 2005 et j'utilise un dataset pour accéder à ma base de données.DataAdapter.Fill(DataSet, nomTable)je voudrai savoir comment Filtrer un dataGrid dans vb 2005 [ par bename ] Comment pourrai-je filtrer un data grid dans vb 2005.MerciBename Afficher une fenetre quand on clique sur un bouton [ par MairYa ] Bonjour,Je suis en train de programmer mon premier projet (un jeu) , et pour le conclure je voudrais que lorsque le joueur gagne et qu'il clique sur u afficher un graphe avec données variables dans une userfom dans Excel [ par benito28 ] Bonsoir à toutes et à tous,    Je bloque depuis des heures sur un satané problème : dans VBA pour Excel, comment afficher un graphique dans un cadre i Affichage Devis [ par paxx ] Salut, je cherche a afficher un devis donc sous une forme classique mais je ne vois pas comment je peu afficher tout  cela...Mes informations sont tra trier une requete et usercontrol [ par ecranbleu27 ] bjren VB6+ ACCESSje gére une BD access, avec un usercontrol(c'est en fait un menu qui me permet de naviguer dans les enregistrements avec ajout,modif, pb afficher une image [ par coyote56 ] Bonjour,J'aurai aimé savoir comment on affiche une image sur visual basic 6.J'ai mis ça : Private Sub Form_Load()Image.Picture = LoadPicture("C:\Docum Afficher l'axe des graphiques sous le dessin [ par roro59650 ] Bonjour,je vais un graphique de type radar. J'ai trois séries, jusque là, tout va bien. J'ai deux séries qui sont remplies d'une couleur. Et je voudra Afficher le contenu d'une base de données access avec visual basic 6 [ par vicelow5901 ] Bonjours,Je vous explique un peu mon problème et je vous préviens d'avance je suis débutant avec tout se qui ADO &amp; Cie. Donc j'ai une base de donn


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,117 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales