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 :

probleme de répétition dans un ListBox


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut probleme de répétition dans un ListBox
    Bonjour
    j'ai un ensemble des données dans un ListBox le probleme que je veut enlevé les donnés répété.merci d'avance .

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Que penses-tu de deux boucle for avec un delete à l'intérieur?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    j'ai essayé sa mé sa marche pa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int r=0;
    do
    {
      for(int n=r+1;n<Form1->ListBox2->Items->Count;n++)
      {
         if(Form1->ListBox2->Items->Strings[r]==Form1->ListBox2->Items->Strings[n])
        {
          Form1->ListBox2->Items->Delete(n);
        }
      }
      r=r+1;
    }while(r<=Form1->ListBox2->Items->Count );

  4. #4
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Vous pouvez procéder ainsi, par exemple :

    Code : 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
     void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i,j;
    bool ok;
     
    ok=true;
    i=0;
    j=1;
    while(ok)
       {
       if(ListBox1->Items->Strings[i]==ListBox1->Items->Strings[j])
          {
          ListBox1->Items->Delete(i);
          j=i;
          }
       j++;
       if(j==ListBox1->Count)
          {
          if(++i==ListBox1->Count-1) ok=false; else j=i+1;
          }
       }
    }
    Au moment d’un delete, i pointe, par le fait même, l’occurrence suivante. Comme on sait du fait de cet algorithme qu’avant i, il n’y a pas de doublets, il suffit de réinitialiser à cette occasion j à la valeur de i pour continuer la comparaison des couples.

    J’espère qu’il n’existe pas dans les ListBox une propriété interdisant les doublets sinon cette méthode serait parfaitement inutile.

    À bientôt
    Gilles

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Juste pour jouer, un brin de récursivité:
    Code : 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
     
    void __fastcall TForm6::Button8Click(TObject *Sender)
    {
    doublons(ListBox1, 0);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm6::doublons(TListBox *aList, int idx)
    {
    int i = idx + 1;
    	do
    	{
    		if (aList->Items->Strings[i] == aList->Items->Strings[idx])
    		{
    			aList->Items->Delete(i);
    		}
    		else
    		{
    			i ++;
    		}
    	}while( i < aList->Items->Count);
    if (++idx != aList->Items->Count - 1)
    {
    	doublons(aList, idx ++);
    }
    }
    Vous remarquerez que la fin est honteusement pompée sur la méthode de Gilles Louise ...
    Mince, vais je devoir payer des droits d'auteur ?

  6. #6
    Membre Expert
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par défaut
    Citation Envoyé par Sunchaser Voir le message
    Vous remarquerez que la fin est honteusement pompée sur la méthode de Gilles Louise ...
    Mince, vais je devoir payer des droits d'auteur ?
    Il doit y avoir un problème quelque part car par exemple, si je remplis la TList de doublons comme suit, il y a un indice hors limites et ça bugue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=0;i<20;i++)
       {
       ListBox1->AddItem("Bonjour"+IntToStr(i),ListBox1);
       ListBox1->AddItem("Bonjour"+IntToStr(i),ListBox1);
       }
    Alors que ma modeste contribution résiste à toutes les configurations.

    À bientôt
    Gilles

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Effectivement, j'avais remplis le tableau des Items "manuellement" dans l'inspecteur d'objet, afin de faire un test rapidement et ca passait...

    Dans le cas cité, il faudrait alors modifier le dernier "if" par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (idx ++ != aList->Items->Count - 1)
    et a priori, ca passe.

    En revanche, si je refait un test maintenant avec une liste de valeur entrée manuellement dans la propriété Items de l'objet, ca ne marche pas ...

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

Discussions similaires

  1. Probleme avec une ListPicker dans une listBox
    Par YohDono dans le forum Windows Phone
    Réponses: 8
    Dernier message: 02/03/2012, 10h30
  2. [Débutant] Probleme d'affichage dans une listbox
    Par toham dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 20/03/2010, 13h15
  3. Probleme de largeur colonne dans ma Listbox
    Par cabridous dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/11/2009, 19h26
  4. Probleme ajout dans un listbox
    Par sentenza dans le forum IHM
    Réponses: 3
    Dernier message: 21/02/2008, 09h52
  5. probleme virgule dans une ListBox avec stringht
    Par yomane 51 dans le forum Delphi
    Réponses: 1
    Dernier message: 10/01/2007, 17h47

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