Listview Sélection Multiple
Est-il un moyen de forcer un contrôle listview pour traiter tous les clics comme si elles l'ont été au moyen de la clé de Contrôle?
J'ai besoin de reproduire la fonctionnalité de l'aide de la clé de contrôle (la sélection d'un élément fixe et unsets son statut de sélection) afin de permettre à l'utilisateur de facilement sélectionner plusieurs éléments en même temps.
Vous en remercie d'avance.
OriginalL'auteur Evan | 2008-09-17
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas le comportement normal de la liste de contrôle, même lorsque MultiSelect est définie sur true.
Si vous souhaitez créer votre propre contrôle personnalisé, vous devrez effectuer les opérations suivantes:
Devrait être assez simple à mettre en œuvre et se sentir comme à la multi-sélection, sans l'aide de la clé de contrôle!
Assurez-vous que vous avez la liste des éléments sélectionnés magasins le "contenu" et de ne pas l'index. À l'aide de l'indice est plus facile, mais cela signifie que vous devez garder la zone de liste.ItemsCollection et votre liste de synchronisation. Nous espérons que votre objet ou d'une chaîne de caractères est assez unique pour garder cette relation!
OriginalL'auteur Ray Hayes
Vous pouvez aussi envisager d'utiliser Des cases à cocher sur l'affichage de la liste. C'est un moyen évident de communiquer la multi-sélection de concept à votre utilisateur moyen qui ne savent pas à propos Ctrl+Clic.
À partir de la page MSDN:
OriginalL'auteur Chris Karcher
Voici la solution que j'ai utilisé pour résoudre ce problème à l'aide de WndProc. Fondamentalement, il fait un test de collision lorsque la souris est cliqué.. alors si MutliSelect est sur, il va automatiquement basculer le point sur/off [.Sélectionné] et pas d'inquiétude sur le maintien de toutes les autres listes ou de jouer avec la liste des fonctionnalités.
Je n'ai pas testé cela dans tous les scénarios, ... il a travaillé pour moi. YMMV.
OriginalL'auteur Matthew M.
Ici est une solution complète qui est une modification de la solution fournie par Matthieu M. au-dessus.
Il propose une amélioration ainsi qu'un peu d'ajout de fonctionnalités.
Amélioration:
Des fonctionnalités supplémentaires:
MultiSelectionLimit
) qui vous permet de mettre une limite sur le nombre d'éléments peut être sélectionné à la fois.Après mon premier poste, j'ai réalisé un petit problème avec le code. La compensation des sélections multiples conduirait à la
ItemSelectionChanged
cas être invoqué plusieurs fois.Je n'ai trouvé aucun moyen d'éviter cela avec le courant de l'héritage, donc à la place j'ai adopté une solution où le bool propriété
SelectionsBeingCleared
sera vrai tout jusqu'à ce que tous les éléments ont été sélectionnés.De cette façon, un simple appel à la propriété, il sera possible d'éviter la mise à jour des effets jusqu'à ce que tous les choix multiples ont été effacés.
OriginalL'auteur rdongart
Forer vers le bas dans ListviewItemCollection et vous pouvez définir la propriété Sélectionnée pour les éléments individuels de vrai. Ce sera, je crois, la possibilité d'émuler le "multi-sélectionnez" composant que vous essayez de reproduire. (Aussi, comme l'intervenant ci-dessus mentionné, assurez-vous d'avoir la propriété MultiSelect de la lisetview définie sur true.)
OriginalL'auteur BKimmel
Juste au cas où quelqu'un d'autre a cherché et trouvé cet article, la solution retenue n'est plus valide. (en fait, je ne suis pas sûr qu'il l'a jamais été). Afin de faire ce que vous voulez (pour sélectionner plusieurs sans une touche de modification), il suffit de régler l'affichage de la liste de sélection type à plusieurs, plutôt que de l'étendue. Plusieurs sélectionne un élément après l'autre lorsque l'utilisateur clique dessus, et a étendu nécessite la touche de modification pour être pressé en premier.
Vous ne savez pas comment il ne fournit pas une réponse à la question. La question était "Est-il un moyen de forcer un contrôle listview pour traiter tous les clics comme si elles l'ont été au moyen de la clé de Contrôle?" et la réponse que j'ai donné était "le jeu de la multisélection de la propriété multiple, non étendu". Ce qui est valable, de rectification et testé réponse à l'original question. Eh bien, c'est la dernière fois que j'ai essayer et aider les autres qui viennent à travers une vieille question avec une vieille solution.
OriginalL'auteur kamikazi
Le Ctrl+Clic comportement est mis en œuvre par le navigateur, et a peu à voir avec le réel .NET de Contrôle. Le résultat que vous essayez d'atteindre peuvent être acquis avec beaucoup de JavaScript supplémentaire - la façon la plus simple serait probablement de construire un contrôle JavaScript par défaut qui fonctionne de cette façon, plutôt que d'essayer de pirater la listview. Serait-ce souhaitable? Dans ce cas, je pourrais le regarder et de revenir vers vous avec une solution.
Merci quand même, Javascript ne peut pas être utilisé dans les winforms de l'environnement.
OriginalL'auteur user16009