Désactiver un ListView en C#, mais afficher toujours la sélection actuelle
Question
J'ai un contrôle ListView et j'essaie de trouver le moyen le plus simple/le meilleur d'interdire la modification de la ou des lignes sélectionnées, sans cache la ou les lignes sélectionnées.
Je sais qu'il y a un HideSelection
propriété, mais cela ne fonctionne que lorsque le ListView
est toujours activé (mais pas ciblé).J'ai besoin que la sélection soit visible même lorsque ListView est désactivé.
Comment puis-je mettre en œuvre cela ?
La solution
Vous pouvez également créer le propriétaire ListView.Vous avez alors un contrôle total sur l'apparence des éléments, qu'ils soient sélectionnés ou non ou que ListView lui-même soit activé ou non.DrawListViewItemEventArgs fournit un moyen de demander à ListView de dessiner des parties individuelles de l'élément afin que vous n'ayez qu'à dessiner les bits qui vous intéressent.Par exemple, vous pouvez dessiner l’arrière-plan de l’élément mais laisser au ListView le soin de dessiner le texte.
Autres conseils
Il existe deux options : modifier les couleurs désactivées des lignes sélectionnées.Ou modifiez toutes les autres lignes pour simuler qu'elles sont désactivées, à l'exception de celle sélectionnée.La première option est évidemment la plus simple, et la deuxième option nécessitera évidemment des protections supplémentaires.
En fait, j'ai déjà choisi la première option et cela fonctionne plutôt bien.N'oubliez pas de rétablir les couleurs par défaut au cas où une autre ligne serait sélectionnée plus tard dans le processus.
Implémentez SelectedIndexChanged et faites ceci
private void listViewABC_SelectedIndexChanged(object sender, EventArgs e)
{
listViewABC.SelectedItems.Clear();
}