TComboBox Problem(sortieren von Einträgen)



  • einer TStringList mit dem Namen list

    TStringList kennt Duplicates



  • Hast recht.
    Wobei Items von TComboBox vom Typ TStrings ist und Dublicates somit nicht kennt. Bei meinem Beispiel hätte man natürlich das vorher in der StringList schon erledigen können. Er könnte seine Strings aber auch anders gespeichert haben.



  • also könnt ich das eigentlich auch nur mit einer TStringList machen indem ich alle Items der ComboBox da rein lade und wenn dann Duplicates auf ignorieren steht würde er die doppelten weglassen???



  • und willst dann alles wieder zur ComboBox zurückgeben?
    Das erscheint mir etwas umständlich. Wie bringst du denn deine Einträge in die ComboBox?



  • Also ich bringe die Einträge über einen Button und den befehl:

    Empfaenger->Items->Add(Empfaenger->Text);
    

    und jetzt wollte ich das sozusagen durch eine TStringList laufen lassen und dann wieder zurück wandeln.

    Aber ich habe es ausprobert bei der Eingabe

    AussortierteEmpfaenger=Empfaenger->Items;
    /*Meine TStringList    Meine TComboBox*/
    

    sagt er mir.
    E2034 Konvertierung von 'TStrings * const' nach 'TStringList *' nicht möglich

    Aber ich dachte das wären beides TStringList da sie beide ähnliche Methoden und Funktionen haben.



  • Das geht auch so nicht. Du kannst Pointer nicht einfach zuweisen. Hier wäre die Memberfunktion Assign() angebracht. Du kannst aber auch wie in meinem Bespiel vor dem Add einfach mit IndexOf testen ob der Eintrag existiert.
    Also so

    if(Empfaenger->Items->IndexOf(Empfaenger->Text) == -1)
      Empfaenger->Items->Add(Empfaenger->Text);
    

    Ist Empfaenger bei dir die ComboBox? Wieso fügst dann den gesamten Text der ComboBox da wieder ein? Oder ist das nur ein Schreibfehler?



  • Hallo

    AussortierteEmpfaenger->Text=Empfaenger->Items->Text;
    

    ist das schnellste Verfahren.

    bis bald
    akari



  • ich werde deine Methode verwenden.

    Wie meinst du das mit dem Pointer zuweisen also die TStringList ist ein Pointer den ich mit new Speicher zugewiesen habe, aber sonst gab es doch auch keine Probleme wenn ich nun zum Beispiel einer ersten TStringList eine Zweite zugewiesen hatte.



  • Wenn du das hier machst

    AussortierteEmpfaenger=Empfaenger->Items
    

    und du hast vorher beiden Pointern mit new Speicherplatz zugewiesen überschreibst du ja den ersten Pointer und kannst ihn somit nicht mehr vernünftig freigeben.
    @akari
    Ist mir auch grade wieder eingefallen (hab mich an den entsprechenden Thread erinnert). Das Assign hatte sich nur so eingeprägt, dass es doch ab und zu noch mit rausrutscht. 😉



  • Ach wenn man mit new Speicher zuweist ist dieser nicht dynamisch??? Aber wieso kann man nachdem man mit Add neue Elemente hinzugefügt hat trotzdem noch vernünftig freigeben?? Ist das dann ein geregeltes Wachstum???

    Aber wieso kann man dann eine TStringList mit einer anderen überschreiben obwohl beides Pointer sind und somit Speicherplatz zugewiesen bekommen haben, eigentlich sind die ja verschieden groß oder?
    Ich bin gerade etwas verwirrt daher bitte ich wiedermal um ein(ausführliche) Erklärung des Probs.

    @akari dachte mir schon das es so irgendwie auch gehen musste.

    Achja und ihr sagt immer etwas von in der Hilfe durchklicken, aber ich komme damit gar nicht klar. Ich gehe also mit F1 auf Hilfe und dann auf TComboBox alles klar danach auf Eigenschaften und dann auf Items auch alles klar aber nun komm ich nicht weiter weil oben nicht sowas wie Methoden Eigenschaften o.ä. steht, aber ich wollte zum Beispiel etwas zu IndexOf() lesen kann das aber irgendwie nicht.

    @edit Problem hat sich geklärt ich dussel muss einfach nur schauen vovon ITems ein Objekt ist also von TStrings und dort habsch doch alles.



  • Hallo

    Aber wieso kann man dann eine TStringList mit einer anderen überschreiben obwohl beides Pointer sind und somit Speicherplatz zugewiesen bekommen haben, eigentlich sind die ja verschieden groß oder?
    Ich bin gerade etwas verwirrt daher bitte ich wiedermal um ein(ausführliche) Erklärung des Probs.

    Dazu kann ich dir nur mal ein gutes Tutorial zum Thema "Grundlagen in C++" empfehlen, siehe das Menü oben rechts auf dieser Seite. Dort erfährst du den Unterschied zwischen Pointern und Instanzen.

    bis bald
    akari



  • akari schrieb:

    AussortierteEmpfaenger->Text=Empfaenger->Items->Text;
    

    ist das schnellste Verfahren.

    ...es sei denn, man hat auch Objekte in die Liste per AddObject() eingefügt.
    Dann ist Assign() womöglich schneller.

    Gruß,

    Alexander



  • denn Unterschied kenne ich doch schon lange.

    Zeiger verweisen nur auf etwas
    Instanzen hingegen sind genaue Kopien sozusagen

    das Problem hat sich aber auch erledigt.


Anmelden zum Antworten