Accueil > > > GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST.FINDALL)
GESTION DES LISTES : RANGEMENT (LIST.SORT) ET FILTRAGE (LIST.FINDALL)
Information sur la source
Description
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...!
Historique
- 08 août 2010 11:19:21 :
- Précision : code pour VB 2008
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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 & Cie. Donc j'ai une base de donn
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : COMBOBOXRE : COMBOBOX par medamineboulbhaiem
Cliquez pour lire la suite par medamineboulbhaiem RE : COMBOBOXRE : COMBOBOX par EhJoe
Cliquez pour lire la suite par EhJoe RE : COMBOBOXRE : COMBOBOX par medamineboulbhaiem
Cliquez pour lire la suite par medamineboulbhaiem RE : COMBOBOXRE : COMBOBOX par medamineboulbhaiem
Cliquez pour lire la suite par medamineboulbhaiem
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|