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

Messages postés
98
Date d'inscription
vendredi 1 septembre 2006
Dernière intervention
24 octobre 2018
- 27 déc. 2017 à 16:34 - Dernière réponse :
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 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) ?
Afficher la suite 

Votre réponse

5 réponses

Messages postés
1709
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- Modifié par vb95 le 29/12/2017 à 02:51
0
Merci
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. 
Commenter la réponse de vb95
Messages postés
98
Date d'inscription
vendredi 1 septembre 2006
Dernière intervention
24 octobre 2018
- 29 déc. 2017 à 11:52
0
Merci
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...
Commenter la réponse de MGD Software
Messages postés
1709
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 29 déc. 2017 à 14:26
0
Merci
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

Commenter la réponse de vb95
Messages postés
98
Date d'inscription
vendredi 1 septembre 2006
Dernière intervention
24 octobre 2018
- Modifié par MGD Software le 29/12/2017 à 17:09
0
Merci
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é...
Commenter la réponse de MGD Software
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 29 déc. 2017 à 19:37
0
Merci
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.
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.