IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

recherche dynamique listBox - textBox [Débutant]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut recherche dynamique listBox - textBox
    Bonjour,

    Je souhaite créer une procédure de recherche dynamique dans une listBox via une textBox un peu dans le même principe qu'un moteur de recherche.

    Lorsque l'utilisateur saisit une lettre ou une chaîne de caractères dans la textBox il faudrait que tout les éléments de ma listBox ne contenant pas cette lettre ou cette chaîne "disparaissent" de ma listBox. A l'inverse si l'utilisateur supprime des caractères les éléments de ma listBox réapparaissent en conséquence.

    J'ai commencé à rédiger la procédure suivante, j'ai passer mon après midi hier à essayer de la faire fonctionner mais sans grand succès. Voici où j'en suis rendu


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            //procédure de recherche client dans lbx_client
            private void tbx_clientRecheche_TextChanged(object sender, EventArgs e)
            {
                int nbItems = lbx_clients.Items.Count;            
                string motRechercher = tbx_clientRecherche.Text.ToString();
                Boolean trouve;
                for (int i = 0; i < nbItems; i++) // parcour de la listBox
                {
                    trouve = lbx_clients.Items[i].ToString().Contains(motRechercher); //comparaison de chaque élément de la liste
                    if (trouve == false)
                    {
                        lbx_clients.Items.Remove(lbx_clients.Items[i]); //suppression de l'élément de la liste
                    }
     
                }

    Je pars peut être dans la mauvaise direction mais je ne suis pas un expert programmation.

    Toute suggestion sera la bienvenue !!!

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Par défaut
    Déjà, tu supprimes des éléments de lbx_clients. donc, ton nombre d'items diminue. Ta boucle va donc à un moment taper dans une zone non définie (lbx_clients.Items[i]). Quand tu supprimes un item, tu dois ré-évaluer ton nombre d'items, même si ça n'est pas "élégant" de modifier une condition de fin de boucle en cours d'utilisation.
    Le solution la plus élégante serait de faire une boucle inversée (en partant du dernier élément et en remontant vers le premier)

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Voila un exemple :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public partial class Form1 : Form
        {
     
            List<KeyValuePair<string, string>> itemlist = new List<KeyValuePair<string, string>>
                                                              {
                                                                  new KeyValuePair<string, string>("1", "abc"), 
                                                                  new KeyValuePair<string, string>("2", "def"), 
                                                                  new KeyValuePair<string, string>("3", "ghi"), 
                                                                  new KeyValuePair<string, string>("4", "xyz"), 
                                                                  new KeyValuePair<string, string>("5", "dvd"), 
                                                                  new KeyValuePair<string, string>("6", "fff")
                                                              };
     
     
            public Form1()
            {
                InitializeComponent();
     
                comboBox1.DataSource = itemlist;
     
                comboBox1.DisplayMember = "Value";
     
                comboBox1.ValueMember = "Key";
            }
     
            private void comboBox1_TextChanged(object sender, EventArgs e)
            {
                comboBox1.DataSource = itemlist.Where(d => d.Value.Contains(comboBox1.Text)).ToList();
            }
        }

    Si tu utilises le data binding, utilises plutôt la méthode Filter de la classe DataBinding.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Merci pour vos réponses.

    En effet il serais plus logique que ma boucle tourne dans l'autre sens.

    GuruuMeditation je ne suis pas encore assez doué pour comprendre ton code. En fait je n'y comprend pas grand chose

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TextBox recherche DYNAMIQUE dans un DataGridView
    Par Saten dans le forum Windows Forms
    Réponses: 25
    Dernier message: 12/08/2016, 13h58
  2. [Toutes versions] TextBox Recherche Dynamique
    Par fabrice57100 dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/09/2012, 20h26
  3. Réponses: 8
    Dernier message: 11/08/2009, 11h38
  4. [VB.NET] Probleme d'affichage entre ListBox/TextBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2004, 11h02
  5. Réponses: 3
    Dernier message: 25/03/2004, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo