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++Builder Discussion :

[debutant] supprimer elements dans une listbox


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut [debutant] supprimer elements dans une listbox
    bonjour, alors voila,
    je veux que quand j'appuie sur un bouton,
    le ou les elements selectionner dans la listbox s'effacent,
    Seulement, il doit y avoir un petit probleme dans ma boucle car il supprime a chaque fois que la moitié selectionné...

    voila le code du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TForm1::Button2Click(TObject *Sender) //boutonsupprimer
    {
     for (int i = 0; i < ListBox1->Items->Count; i++)
     {
     if (ListBox1->Selected[i])
     {
        ListeFichiers->Delete(i);
        ListBox1->Items->Delete(i);
         Label1->Caption="";
     
     }
    }
    }

  2. #2
    Membre régulier
    Avatar de bebeours
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 103
    Points : 123
    Points
    123
    Par défaut
    Change cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i = 0; i < ListBox1->Items->Count; i++)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i = ListBox1->Items->Count - 1; i >= 0 ; i--)

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    je te remercie... ca marche
    mais euh, comme j'ai un peu de mal et si ca ne t'ennuies pas
    est ce que tu peu m'expliquer comment fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = ListBox1->Items->Count - 1

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    puis pourquoi avec mon code je prenait que la moitié ? (j'abuse peut etre de votre patience)

  5. #5
    Membre régulier
    Avatar de bebeours
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 103
    Points : 123
    Points
    123
    Par défaut
    Au lieu d'incrémenter i, tu dois le décrémenter et parcourir les Items de ta ListBox en commencant par le dernier, afin d'assurer la validité de ton indice i.

  6. #6
    Membre régulier
    Avatar de bebeours
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 103
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par F.F.
    puis pourquoi avec mon code je prenait que la moitié ? (j'abuse peut etre de votre patience)
    Si tu supprimes un Item, la condition d'arrêt de ta boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i < ListBox1->Items->Count
    est modifiée !

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    ok merci beaucoup

  8. #8
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Citation Envoyé par bebeours
    Citation Envoyé par F.F.
    puis pourquoi avec mon code je prenait que la moitié ? (j'abuse peut etre de votre patience)
    Si tu supprimes un Item, la condition d'arrêt de ta boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i < ListBox1->Items->Count
    est modifiée !
    Ce n'est pas le problème.

    Le problème est que quand on supprime un item, les suivants "remontent". Ainsi, si tu parcours le tableau d'item du début vers la fin, quand tu supprime le 2ème élément, le suivant prend sa place, tandis que tu incrémentes ta variable i. Ainsi après avoir supprimé le 2ème élément, l'itération suivante de ta boucle va t'amener sur le 4ème élément, le 3ème ayant pris la place du 2ème.
    En revanche, en parcourant le tableau à l'envers, on ne modifie les indices que des éléments qu'on a déjà traité => pas de problèmes.

    J'espère que c'est clair

    Cordialement,

    Arnaud

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Tout a fait clair...
    je te remercie aniki euh.. arnaud

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

Discussions similaires

  1. [langage] Supprimer un élément dans une liste
    Par myjuna dans le forum Langage
    Réponses: 15
    Dernier message: 06/08/2014, 11h49
  2. [AC-2002] supprimer un element dans une listbox Multicolonne
    Par kkaba dans le forum IHM
    Réponses: 4
    Dernier message: 07/06/2011, 12h57
  3. Selectionner plusieurs elements dans une ListBox
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 01/03/2007, 08h27
  4. Réponses: 4
    Dernier message: 24/05/2006, 16h05
  5. Réponses: 1
    Dernier message: 18/05/2006, 11h37

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