Listbox - selection synchonisée [débuant]

Signaler
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour,

Je dispose de 4 listbox et je souhaiterais que le fait de selectionner un item dans chacune de cette lisbox implique la selection au meme index dans les 3 autres.
J'ai codé :

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox2.SetSelected(listBox1.SelectedIndex, true);
            listBox3.SetSelected(listBox1.SelectedIndex,true);
            listBox4.SetSelected(listBox1.SelectedIndex,true);
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.SetSelected(listBox2.SelectedIndex, true);
            listBox3.SetSelected(listBox2.SelectedIndex, true);
            listBox4.SetSelected(listBox2.SelectedIndex, true);

        }

        private void listBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.SetSelected(listBox3.SelectedIndex, true);
            listBox2.SetSelected(listBox3.SelectedIndex, true);
            listBox4.SetSelected(listBox3.SelectedIndex, true);

        }

        private void listBox4_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox1.SetSelected(listBox4.SelectedIndex, true);
            listBox2.SetSelected(listBox4.SelectedIndex, true);
            listBox3.SetSelected(listBox4.SelectedIndex, true);
        }

Bien entendu j'obtiens une boucle infinie puisque que chaque selection d'un item implique l'evenement selection d'un autre qui reselectionne le premier.. etc

J'ai essayé d'inclure des conditions avec des variable booleenes mais je me suis vite emmélé.. je suis perdu..
Pourriez vous m'aider ?

Merci d'avance,
Cordialement
Anz.

5 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je verrai bien un truc du genre :

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBox1.Tag == null || !listBox1.Tag) {
               listBox1.Tag = true;
               listBox2.SetSelected(listBox1.SelectedIndex, true);
               listBox1.Tag = false;
            }
        }

ainsi, listBox1 déclenche la mise à jour de ListBox2 qui déclenchera celle de ListBox3... et enfin listBox4 pour ListBox1.

Le fait de mettre True/False dans le Tag permet d'interrompre la boucle (il est à mettre sur toutes les listboxes)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

Bonjour, et merci pour ta réponse,

Le problème est que je dois pouvoir selectionner l'item dans n'importe quelle des listbox et pas seuleument la listbox 1.
Si je suis ton raisonnement, la selection ne se fait sur les autres que si la premiere a lieu sur la listbox1 non ?

Merci d'avance,
Anz.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
non... ca marche avec toute... elles sont chainées

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

Ca m'a l'air pas mal seulement j'obitens une erreur : "l'opérateur ! ne peut être appliqué à une opérande de type 'objet' ".
Bien entendu quand je retire la partie " || !listbox1.tag " cela fonctionne ; toutes les listbox sont selectionner mais ensuite cela ne fonctionne plus.

Pourrais-tu m'en dire plus ?

Merci de ton attention,

Cordialement,
Anz.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
ooops...

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBox1.Tag == null || !(bool)listBox1.Tag) {
               listBox1.Tag = true;
               listBox2.SetSelected(listBox1.SelectedIndex, true);
               listBox1.Tag = false;
            }
        }
voila qui devrait être mieux

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]