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

C# Discussion :

Supprimer plusieurs éléments d'un ListBox


Sujet :

C#

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut Supprimer plusieurs éléments d'un ListBox
    Bonjour,

    je voudrais supprimer l'ensemble des éléments sélectionnés d'un ListBox.
    Pour l'instant, je procède de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (int k in ListBox1.SelectedIndices)
    {
        ListBox1.Items.RemoveAt(k);
    }
    Mais ce code ne m'en supprime qu'un sur deux. Par exemple, si je sélectionne :
    AAA
    BBB
    CCC
    DDD
    EEE
    il va me supprimer AAA, CCC et EEE, tout en me laissant BBB et DDD.

    Je suppose donc que la méthode n'est pas la bonne... mais je ne vois pas comment faire autrement.

    Merci pour votre aide !

    Alban

  2. #2
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Si tu veux supprimer tous les elements de ta ListBox :

    MaListBox.Items.Clear();


    C'est ca que tu cherchais ?

  3. #3
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Desole, si c'est les elements selectionnes que tu veux supprimer essaye ca :

    MaListBox.SelectedItems.Clear();

  4. #4
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Ton problème vient du fait que tu itère sur une collection et que EN MEME TEMPS, tu en élimine des items, le tout en te basant sur leur indice de position. La méthode de Contrec devrait marcher.

  5. #5
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    Relit ton algo.... Tu parcours les items avec un id de 1 a n et tu en supprime 1 de temps en temps. Quand tu est au iieme et que tu le supprime, forcement tu passe automatiquement au i+1ieme.

  6. #6
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Il ne te supprimais qu'une valeur sur 2 car les indexes changent au fur et a mesure que tu supprimes des enregistrements :

    Premiere colonne : Index du ListBox
    Deuxieme colonne : Texte associe a cet Index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0             AAA
    1             BBB
    2             CCC
    3             DDD
    4             EEE
    Premier passage dans ta boucle k = 0, suppression de AAA, voici l'etat de ton ListBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0             BBB
    1             CCC
    2             DDD
    3             EEE

    Deuxieme passage dans ta bloucle k = 1, suppression de CCC (et non de BBB car l'index s'est automatiquement decale), voici l'etat de ton ListBox :

    Troisieme passage dans ta boucle k = 2, suppression de EEE (meme explication), voici l'etat de ton ListBox :

    Fin de la boucle. Voila pourquoi il ne te restait que 2 Items. En general, pour supprimer des lements des listes comme des ListBox ou de ComboBox, il y a presque toujours des methodes automatiques comme :

    ListBox.Selecteditems.Clear();

    Il faut les chercher...

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Merci pour ces éclaircissements ! Maitenant, ça parait évident pour l'algo...

    Par contre, je n'arrive toujours pas à les supprimer :
    • listbox.selecteditems.clear() n'existe pas ;
    • listbox.selectedindices.clear() non plus.
    À noter qu'il n'y a pas non plus de méthode Remove().

    J'ai bien trouvé le listbox.clearselected(), mais ça se contente de désélectionner tous les élements.

    Chose que j'avais oublié de préciser : j'utilise le framework 1.1.

    De quel côté faut-il que je cherche ? Parce que là, rien de plus ne me parle

    Merci d'avance !

  8. #8
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Je chercherai a isoler la liste des Items a supprimer.

    Puis j'essayerai de trouver une methode de les enumerer.

    enfin pour j'enumere je supprime l'Item en cours.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Donc vous me confirmez qu'a priori, il n'y a pas de méthode toute faite pour ça ?

    J'étais en train de penser à récupérer les SelectedIndicies, de les stocker et de supprimer chaque index avec un RemoveAt() en partant de l'indice le plus grand vers le plus petit (pour éviter les décalages).

    Du coup, j'ai fait quelque chose comme ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int k = (listbox.SelectedIndices.Count - 1) ; k >= 0 ; k--)
    {
        listbox.Items.RemoveAt(listbox.SelectedIndices[k]);
    }
    Et ça a l'air de marcher
    Merci pour vos indications !

  10. #10
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Je ne sais pas si c'est valable en 1.1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IEnumerator EnumSeledctedItems = MaListBox.SelectedItems.GetEnumerator();
     
    while (EnumSeledctedItems.MoveNext())
    {
        MaListBox.SelectedItems.Remove(EnumSeledctedItems.Current);
    }
    ca devrait peut etre fonctionner aussi (a tester)...

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Presque... mais la methode Remove() n'est pas disponible pour les SelectedItems ou les SelectedItem.

    Ceci dit, ce n'est pas perdu pour ma culture, puisque tout est à faire encore
    Merci !

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

Discussions similaires

  1. [AC-2003] Supprimer plusieurs éléments d'une listbox
    Par marcusien dans le forum IHM
    Réponses: 4
    Dernier message: 04/09/2010, 12h57
  2. Transmettre plusieurs éléments entre 2 Listbox
    Par Alpoids01 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 22/04/2009, 17h10
  3. selection de plusieurs éléments d'une ListBox
    Par keks42 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/09/2008, 15h32
  4. Ajouter / supprimer plusieurs éléments dans un formulaire
    Par nesswaw dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/03/2008, 10h52
  5. Supprimer plusieurs champs sélectionnés dans une ListBox
    Par piotrr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2007, 15h49

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