Delphi/Lazarus: Sélectionner tout avec CTRL+A dans ListView
Conseil de Stefan Trost | Dernière mise à jour le 18/11/2022 | Créé le 26/06/2021
Si vous avez écrit une application en Delphi ou Lazarus contenant un TListView avec quelques entrées, il est assez agréable d'avoir la possibilité de sélectionner tous les éléments du ListView en appuyant sur les raccourcis clavier CTRL et A sur le clavier. Malheureusement, un ListView ne prend pas en charge cela automatiquement.
Mais nous pouvons rapidement y remédier en écrivant le code suivant dans l'événement OnKeyDown de notre ListView :
procedure Tprog.ListView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var i: integer; begin if (Shift = [ssCtrl]) and (key = ord('A')) then begin ListView1.Items.BeginUpdate; for i := 0 to ListView1.Items.Count - 1 do ListView1.Items[i].Selected := true; ListView1.Items.EndUpdate; end; end;
Tout d'abord, ce code vérifie quelles touches ont été enfoncées. Si les touches sont "CTRL" (Shift = [ssCtrl] - la touche Maj est pressée) et "A" (key = ord('A') ou aussi key = 65), nous parcourons toutes les entrées de ListView et définissons la propriété "Selected" de chaque élément sur "true". Pour que la ListView n'est pas dessinée à nouveau après chacun de ces changements individuels, nous appelons .BeginUpdate et .EndUpdate avant et après les éléments passés. Bien sûr, vous pouvez toujours ajouter des conditions pour d'autres touches ou combinaisons de touches.
Important: Pour pouvoir sélectionner plusieurs éléments dans la ListView, nous devons auparavant définir la propriété "MultiSelect" de notre ListView sur "true" (par exemple via l'Object Inspector). Sinon, cette propriété est désactivée par défaut afin qu'un seul élément de ListView puisse être sélectionné en même temps.
Solution plus générale
Dans notre premier exemple de code, nous travaillons directement avec une ListView concrète qui porte le nom ListView1. Vous pouvez le faire de cette manière, mais dans certains cas, une solution plus générale est plus élégante. Par exemple, si nous avons plusieurs ListViews et chacun d'eux devrait réagir à notre combinaison de clés de la même manière. Dans ce cas, nous pouvons écrire une procédure générale que nous pouvons ensuite attribuer à chaque ListView sans avoir à écrire le même code pour plusieurs fois.
Quand le fais de cette façon, nous profitons de la variable "Sender" qui contient une référence à la ListView appel. C'est ainsi que nous savons quel ListView a appelé le code afin que nous puissions continuer à travailler avec cette ListView. Un code général pourrait ressembler à ceci:
procedure Tprog.ListViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var AListView: TListView; i: integer; begin if not (Sender is TListView) then exit; AListView := (Sender as TListView); if (Shift = [ssCtrl]) and (key = 65) then begin AListView.Items.BeginUpdate; for i := 0 to AListView.Items.Count - 1 do AListView.Items[i].Selected := true; AListView.Items.EndUpdate; end; end;
Il n'a pas beaucoup changé par rapport au premier code. Au lieu d'accéder directement à "ListView1", cette fois, nous travaillons avec une variable que nous avons appelée "AListView" ici. Afin qu'il n'y ait aucune erreur si la procédure est appelée par un type de contrôle différent, nous vérifions d'abord la première ligne si l'expéditeur est vraiment du type TListView. Sinon, nous nous déversons immédiatement. Si c'est le cas, nous pouvons continuer et sélectionner tous les éléments de la ListView appel en fonction du processus dont nous avons discuté ci-dessus.
Sur l’Auteur
Vous pouvez trouver des logiciels de Stefan Trost sur fr.sttmedia.com. Avez-vous besoin d'un logiciel personnalisé selon vos propres besoins? Écrivez-nous: fr.sttmedia.com/contact
Voir Profil
Sujets Connexes
MySQL: Sauts de Ligne dans MySQL
Conseil | 0 Commentaires
Script Batch: Arrêter Ordinateur Windows
Tutoriel | 4 Commentaires
Types MIME des Formats de Fichiers Microsoft Office
Info | 0 Commentaires
VirtualBox: Changer la Date et l'Heure
Tutoriel | 10 Commentaires
La Recherche Askingbox
Info | 0 Commentaires
Delphi/Lazarus: Ajouter un Item ou Ligne à ListView
Info | 0 Commentaires
CSS: Comment inclure CSS dans HTML
Tutoriel | 0 Commentaires
Avis Important
Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.
Participer
Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.