Trier une listbox
RésoluBruno83200_6929 Messages postés 210 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 19 septembre 2024 - 19 sept. 2024 à 10:55
- Trier une listbox
- Excel trier par ordre croissant chiffre - Guide
- Application gratuite pour trier les photos - Guide
- Gmail trier par expéditeur - Guide
- Trier tableau croisé dynamique - Guide
- Trier une liste python sans sort - Forum Python
2 réponses
18 sept. 2024 à 12:19
Bonjour,
Pour faire cela, tu peux utiliser quelques fonctionnalités intégrées de PowerShell.
Get-Content "\\chemin\Parc.txt" | ForEach-Object { $_.split(';')[0] } extrait la première zone de chaque ligne.
Sort-Object | Select-Object -Unique trie la liste et élimine les doublons.
Ensuite, la boucle foreach ajoute chaque élément unique et trié à la ListBox.
# Création de la ListBox $ListePC = New-Object System.Windows.Forms.ListBox $ListePC.Location = New-Object System.Drawing.Point(350,40) $ListePC.Size = New-Object System.Drawing.Size(300,20) $ListePC.Height = 160 # Lecture du fichier et extraction de la première zone $Computers = Get-Content "\\chemin\Parc.txt" | ForEach-Object { $_.split(';')[0] } # Trier les éléments et supprimer les doublons $UniqueSortedComputers = $Computers | Sort-Object | Select-Object -Unique # Ajouter les éléments triés et uniques dans la ListBox foreach($Computer in $UniqueSortedComputers) { [void]$ListePC.items.add($Computer) } # Ajout de la ListBox au formulaire $form.Controls.Add($ListePC)
19 sept. 2024 à 10:55
Oui, si tu veux afficher plusieurs colonnes dans ton interface graphique, comme la zone [2] et la zone [3] en plus de la zone [1] tout en triant par la zone [1], une ListView serait effectivement plus adaptée qu'une ListBox, car elle permet de gérer plusieurs colonnes.
Voici comment tu peux adapter ton script pour utiliser une ListView avec plusieurs colonnes, et trier les éléments uniquement en fonction de la première zone (zone [0]).
# Création de la ListView $ListView = New-Object System.Windows.Forms.ListView $ListView.Location = New-Object System.Drawing.Point(350,40) $ListView.Size = New-Object System.Drawing.Size(500,200) $ListView.View = [System.Windows.Forms.View]::Details $ListView.FullRowSelect = $true # Ajout des colonnes $ListView.Columns.Add("Zone 1", 150) # Pour afficher la zone [0] $ListView.Columns.Add("Zone 2", 150) # Pour afficher la zone [2] $ListView.Columns.Add("Zone 3", 150) # Pour afficher la zone [3] # Lecture du fichier et extraction des zones 1, 2 et 3 $Computers = Get-Content "\\chemin\Parc.txt" | ForEach-Object { $Zone = $_.split(';') [PSCustomObject]@{ Zone1 = $Zone[0] Zone2 = $Zone[2] Zone3 = $Zone[3] } } # Trier les éléments par Zone1 $SortedComputers = $Computers | Sort-Object Zone1 # Ajouter les éléments triés dans la ListView foreach($Computer in $SortedComputers) { $item = New-Object System.Windows.Forms.ListViewItem($Computer.Zone1) $item.SubItems.Add($Computer.Zone2) $item.SubItems.Add($Computer.Zone3) [void]$ListView.Items.Add($item) } # Ajout de la ListView au formulaire $form.Controls.Add($ListView)
La ListView est configurée avec trois colonnes (Zone 1, Zone 2, Zone 3).
Le mode d'affichage est défini sur Details pour pouvoir afficher les colonnes.
FullRowSelect permet de sélectionner toute la ligne.
Le fichier est lu et transformé en objets personnalisés (PSCustomObject) avec trois propriétés : Zone1, Zone2, et Zone3 correspondant aux zones [0], [2], et [3] du fichier.
Sort-Object Zone1 trie les éléments uniquement en fonction de la première zone (Zone1).
Pour chaque élément trié, un objet ListViewItem est créé avec la première zone comme élément principal, et les deux autres zones sont ajoutées en tant que SubItems.
Modifié le 19 sept. 2024 à 09:21
Merci Bruno, en plus avec les commentaires ça parait si simple. Est-ce que je peux abuser en corsant le problème : si je veux afficher dans la listbox 2 autres zones du fichiers en plus par ex. [2] et [3] et ne trier que par rapport à la zone [1] , il faut que j'utilise listview je pense ?