Problème de sélection et de case à cocher dans ListView

MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 - Modifié le 28 déc. 2017 à 13:36
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 29 déc. 2017 à 19:37
Bonjour,
J'ai un souci avec un ListView paramétré avec MultiSelect, FullRowSelect et CheckBoxes à True.

Lorsque je sélectionne plusieurs items, soit avec la touche Maj, soit avec la touche Ctrl, il se cochent tous automatiquement sauf celui sur lequel je viens de cliquer (je précise : je clique sur le texte, pas sur la case à cocher). L'inverse est vrai aussi : quand je clique sur un autre, ceux déjà sélectionnés se désélectionnent.

Outre que ce comportement est aberrant (pourquoi pas le dernier), ce n'est pas du tout ce que je souhaite, la sélection et les cases à cocher n'ayant pas du tout le même usage (sinon, à quoi servent les cases ?).

D'autre part, quand je clique sur un seul item (sans Maj ni Ctrl, donc sélection unique), l'item ne se coche pas automatiquement (ce qui est normal).

J'ignore si c'est un comportement standard du ListView du FrameWork (4.5.2). Je n'avais pas ce comportement avec celui du VB6.

Ou alors j'ai validé (ou oublié de dévalider) une propriété du Listview. Mais j'ai eu beau chercher quelque chose comme "CheckOnSelect" ou "CheckOnClick" (comme pour les menus), je n'ai rien trouvé.

Y a-t-il un moyen d'éviter ce comportement, qui s'avère désastreux pour ce que je veux faire (risque de perte des données correspondantes aux items cochés) ?

5 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 29 déc. 2017 à 02:51
Bonjour

La lecture de ceci devrait te donner la solution à ton problème : https://msdn.microsoft.com/fr-fr/library/system.windows.forms.listview.checkboxes(v=vs.110).aspx

Pour la listview soit on fait la sélection
1) soit avec MultiSelect = True et FullRowSelect = True avec les touches Maj et Ctl
2) soit avec les cases à cocher
Mais on ne mixe point les 2 façons de faire
Maintenant le code nécessaire à la gestion des listviews dépend de la façon de sélectionner ( soit avec la collection des items sélectionnés ou soit avec la collection des checkbox cochées )

Et Bonnes fêtes en même temps !

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 
0
MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 2
29 déc. 2017 à 11:52
Bonjour,

Effectivement, en enlevant la propriété FullRowSelect, je n'ai plus ce phénomène. Cependant, c'est très ennuyeux car la première colonne (texte) est toute petite et difficile à sélectionner (d'où l'intérêt du FullRowSelect).

De plus, cela n'explique pas le fait que les items sélectionnés sont cochés, SAUF celui sur lequel on clique en dernier... Cela me paraît plus s'apparenter à un bug qu'à un comportement délibéré.

D'autant plus que le composant COM, utilisable en VB6, ne présente pas ce défaut et a un comportement tout à fait normal. Je ne vois pas pourquoi Microsoft aurait décidé de changer le comportement de la sélection. Dans l'article pointé par la lien, il n'est question que de la propriété MultiSelect. Il n'y a aucune mention de FullRowSelect, et on n'imagine pas pourquoi le fait d'utiliser la ligne entière plutôt que la première colonne changerait le comportement des cases à cocher.

Je pense que le développement du contrôle a été testé en mode SmallIcon ou LargeIcon (le mode Details n'est évoqué qu'entre parenthèses), et que le problème du FullRowSelect n'a jamais été testé. Nul n'est à l'abri d'un bug, mais quand même...
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
29 déc. 2017 à 14:26
Bonjour
A mon avis tu devrais laisser la propriété FullrowSelect à True et CheckBoxes à False
Ainsi tu devrais avoir le comportement classique d'une listview avec la possibilité de sélections multiples avec Maj et Ctl !
Par contre avec Checkboxes à True la sélection se fait à mon avis avec les Checkboxes et non en sélectionnant une ligne de la listview sans toucher aux Checkboxes .
Je ne peux guère t'en dire plus : je n'ai jamais eu à utiliser une listview avec les Checkboxes

0
MGD Software Messages postés 186 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 avril 2022 2
Modifié le 29 déc. 2017 à 17:09
Absolument pas.

Les checkboxes sont absolument nécessaires à mon application car elles marquent les items sur lesquels il faut faire une action.
La sélection sert à cocher, décocher les items, mais aussi à les déplacer et les réorganiser, et à modifier certaines valeurs contenues dans le tag des items sélectionnés (mais pas forcément cochés).
J'ai donc absolument besoin des deux propriétés.
A la limite, je pourrais annuler le FullRowSelect, mais les utilisateurs vont être surpris et avoir des difficultés pour sélectionner les items, surtout ceux qui utilisaient la version VB6 qui ne vont pas comprendre pourquoi ça ne marche plus en cliquant sur un subitem de la ligne. Cette appli est un freeware utilisé par beaucoup de personnes.

Je suis furieux de voir qu'une fois de plus une version récente d'un produit Microsoft marche moins bien que la version précédente. Je devrais pourtant être habitué...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
29 déc. 2017 à 19:37
Bonsoir, je n’ai jamais aimé utiliser la listview (déjà en VB6) et je n’ai pas accès à un pc pour tester et essayer de t’aider.

Cependant, sur ça
Je suis furieux de voir qu'une fois de plus une version récente d'un produit Microsoft marche moins bien que la version précédente. Je devrais pourtant être habitué...
je peux apporter quelques éléments.
C# n’a pas été créé pour remplacer VB6, mais pour faire concurrence à Java. L’abandon de VB6 est plus une conséquence de l’apparition de C#.
Alors disposer de contrôles peu efficaces n’est pas un bon point pour inciter les codeurs à préférer C# à Java.
Et bien je pense que winform n’était pas destiné aux pros, mais aux codeurs comme mois, plus ou moins autodidactes qui codent pour leur boite, une asso ect... C’est WPF qui s’adresse vraiment aux équipes travaillant avec des designers.
Mais voilà, WPF n’est sorti qu’avec la framework 3 (.5?) et pour faire patienter, y’avait winform.
Pour préparer le terrain à la framework 2, la grande majorité des contrôles winform ont été réécrits et optimisés pour le binding. En WPF tout tourne autour du binding.
La listview est l’une des exceptions, je ne sais pas si les codeurs de Microsoft sont tombés sur un os,ou s’il s'agit d’un choix politique ou de flemme, mais le binding n’est pas possible. Et il est possible que le contrôle n’ait pas été revu et corrigé depuis la framework 1.
0
Rejoignez-nous