Doppelte Einträge in Combobox entfernen



  • Hallo Leute. Ich hab ein kleines Problem mit dem Anzeigen meiner Daten in einer ComboBox. Ich will nämlich, dass alle doppelten Einträge gelöscht werden. Kennt jemand von euch ein Funktion, die das bewerkstelligt?



  • Warum fügst du die Daten doppelt ein wenn du sie nicht doppelt haben willst.

    Zu deiner Frage: NEIN
    Lösung: Siehe erster Satz



  • die funktion ist recht einfach zu realisieren.

    ne schleife bauen welche in combobox einfügt und in dieser schleife noch eine die den momentanen variablenwert der eingefügt werden soll mit den schon vorhandenen vergleicht. sind diese identisch füge nicht ein. klar ?

    gruesse rene



  • @ Tom:
    Das ist mir schon klar. Der Hintergrund ist, dass ich alle Ordner eines bestimmten Pfades auflisten will. Nur dummerweise läuft aus irgendeinem Grund diese Schleife zwei mal durch, sodass alle Ordner doppelt aufgezählt werden. Und das sogar im offiziellen Beispiel von Micosoft.
    Wenn du da eine bessere Lösung kennst, dann immer her damit 🙂



  • kannst du mir bitte diesen code zeigen

    oder wenigstens den link wo in der msdn der fehlerhafte code steht?
    wuerd ich gerne mal sehen

    dank im voraus



  • würde auch sagen, gib mal dein coding hier rein. weil schließlich sollte man das problem an der wurzel packen und nicht ne beule drumrum programmieren. 🙂

    geiler spruch oder ?? 😃



  • Also der Code steht hier im Beispiel:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_CFileFind.3a3a.IsDirectory.asp

    Und das ist mein Code. UserDir gibt einen Pfad zurück. Fast 1:1 übernommen:

    CString Path, sName;
        CString temp;
    	CFileFind ff;
    	Path=UserDir();
    
    	CString jimbo;
    
    	BOOL cont = ff.FindFile(Path + "\\*");
    
    	while(cont)	{
            cont = ff.FindNextFile();
            if(ff.IsDots())
                continue;
    		if(ff.IsDirectory())
    
            {
    			temp = ff.GetFilePath();
    			m_ctrlUsers.AddString(temp);
    		}
        }
        ff.Close();
    


  • hui

    ich hab auch mal copy/paste gemacht ( und nur die listbox variable-namen geandert + pfad )

    und er listet alle einmal auf

    gibt mal den path namen direkt an

    z.b.
    Path="H:\\ordner\\Test ordner\\hier drinnen noch ein paar ordner";

    wenn es auch nicht klappt ( wovon ich mal ausgehe )

    dann debug dochmal und schau mal genau nach wie er springt

    wie gesagt bei mir klappts einwandfrei

    und wer zur hoelle ist jimbo ???? 😉



  • aber und auf deine frage back zu kommen

    wie man doppelte eintraege loescht

    bestimmte lenght der eintraege

    mache for schleife die solange geht wie lenght eintrage

    nimm ersten string ( int i ist am anfang 0 )

    gehe die box in der 2ten for schleife ganz durch und fange bei int a= i+1; an und auch bis lenght wieder

    wenn doppelter gefunden wird dann loeschen
    lenght-- ( nicht vergessen fuer erste schleife, sonst ueberlauf)
    mann kann auch ein flag setzen das die 2te schleife jetzt aufhoert ( wenn wirklich nur doppelten also keine 3fachen oder mehr )

    tja das wars vom prinzip schon

    viel spass beim ausprobieren, wenns nicht geht, dann code posten, dann schau ich mal nach ( ist ja net so schwer )



  • Abgesehen davon das ich

    FindFile(curdir + "\\*.*");
    

    aufrufe (also mit .) sehe ich keinen Fehler.

    Das du die Doppelten löschen willst ist der falsche Ansatz.
    Was mach der Debug.



  • Hey Jungs, danke für euere Antworten. Hab den Fehler gefunden: Ich hab die Funktion an einer anderen Stelle nochmal aufgerufen. Das ganze war so inneinandergewurstet, dass man das nicht sofort gesehen hat. 🙂


Anmelden zum Antworten