Focus d'une colonne en particulier d'une ListView

Slayermole Messages postés 2 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 6 octobre 2009 - 2 oct. 2009 à 18:06
Slayermole Messages postés 2 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 6 octobre 2009 - 6 oct. 2009 à 14:05
Bonjour à tous,

J'ai découvert que lorsqu'une ListView a le focus, il suffit de taper une lettre pour sélectionner la ligne dont le contenu de la première colonne commence par la lettre en question (si l'on tape a répétition sur la lettre, cela sélectionne à tour de rôle les différentes lignes concernées s'il y en a plusieurs).

Une fonction de recherche assez pratique donc lorsqu'il y a beaucoup d'élément.

Mais j'ai une petite question :
Comment faire pour que le critère de recherche soit le texte de la deuxième colonne au lieu de la première ?

Ex : 2 colonnes, nom et prénom. Par défaut, si je tape sur la lettre "P", la première ligne donc le nom commence par "P" est sélectionnée, mais j'aimerais que ce soit la première ligne dont le *prénom* (2ème colonne) commence par "P".

J'ai cherché dans les attributs et méthodes du composants mais je n'ai rien trouvé...

Y'aurait-il un moyen simple de résoudre mon problème (composant dérivé, event particulier...) ?

Merci d'avance à tous

2 réponses

CoolSpirit Messages postés 2 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 5 octobre 2009
4 oct. 2009 à 02:38
Bonjour Slayermole

J'ai déjà eut à faire à ce problème...

La solution la plus propre que j'ai pu trouver, c'est de créer une TextBox, à laquelle on ajoute l'évènement TextChanged. Dans cet évènement, à l'aide d'une Regex on écrème la ListView comme on le souhaite.

Si tu ne tiens pas à créer une TextBox. Tu peux peut être ajouter l'évènement KeyDown à ta ListView de telle sorte...:

        void listView_KeyDown(object sender, KeyEventArgs e)
        {
            Regex test = new Regex(" " + e.Key);

            foreach(ListViewItem l in (sender as ListView).Items)
            {
                if(test.IsMatch(l.Content.ToString()))
                {
                    l.IsSelected = true;
                    break;
                }
            }
        }


Je n'ai pas eut le temps de tester ce code, il contient surement des failles mais peut être ça t'indiqueras la direction à suivre ;)

Il y a peut être un event fait exprès ou une méthode plus classe mais je ne la connais pas.

Si tu as des questions n'hésite pas.

Bonne soirée
0
Slayermole Messages postés 2 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 6 octobre 2009
6 oct. 2009 à 14:05
Bonjour CoolSpirit

Tout d'abord merci pour ta réponse.

J'avais pensé à l'évènement KeyDown mais je ne savais pas vraiment par quel bout l'attaquer, et l'extrait de code que tu me présente là m'éclaire assez.
Je vais donc commencer par essayer cette solution.

Je n'ai jamais entendu parler de la classe regex, j'explorerai cette piste en dernier recours.

Merci encore, et si quelqu'un a trouvé un moyen plus "conventionnel" d'implémenter cette fonctionnalité, je suis preneur.

Bonne journée à tous.
0
Rejoignez-nous