Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TListBox - Doppelte Einträge entfernen


Moritz M. - Sa 08.03.03 09:19
Titel: TListBox - Doppelte Einträge entfernen
Hi

Gibt es eine Prozedur um in einer TListBox doppelt vorhandene Einträge zu entfernen? Oder gibt es eine Variable, die man setzt kann, dass dann ein Eintrag, der schon vorhanden ist, gar nicht hinzugefügt wird? Von sowas hab ich nämlich mal gehört.

Thx


Keldorn - Sa 08.03.03 13:33
Titel: Re: TListBox - Doppelte Einträge entfernen
Onz hat folgendes geschrieben:
Hi

Gibt es eine Prozedur um in einer TListBox doppelt vorhandene Einträge zu entfernen?

meines wissens nach nicht
Zitat:
Oder gibt es eine Variable, die man setzt kann, dass dann ein Eintrag, der schon vorhanden ist, gar nicht hinzugefügt wird? Von sowas hab ich nämlich mal gehört.


ja nennt sich duplicates und ist entweder bei den Listbox oder bei Items->TStrings drin. (Hab grad kein aktuelles Delphi zu hand, kann nicht nachguggn)

Mfg Frank


Spike - Sa 08.03.03 13:46

Es gibt die Eigenschaft Duplicates := DupIgnore
Allerdings für TStringList. Hat nur Auswirkung wenn Sorted true ist.


Moritz M. - Sa 08.03.03 19:26

Das geht irgendwie nicht... :cry:


Keldorn - Sa 08.03.03 19:53

ok, stringlist wars, sorry


wenn du den Umweg über eine Stringlist nicht gehen willst, nutze indexof
Ich bin auch ziemlich sicher, daß das mit duplicate vor kurzem hier im Forum behandelt wurde, such mal

Quelltext
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:
26:
27:
procedure TForm1.Button1Click(Sender: TObject);
//Item nur hinzufügen, wenn es noch nicht in Liste ist
begin
  if ListBox1.Items.indexof(edit1.text)=-1 then
    listbox1.items.add(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
//alle doppelten Items in der Listbox löschen
Var i:integer;
    S:string;
begin
  with listbox1 do
    begin
     i:=items.count-1; //Listbox vom Ende durchgehen
     while i>=0 do
       begin
         s:=items[i];
         while items.indexof(s)<>i do
           begin
             items.Delete(items.indexof(s));
             dec(i);
           end;
         dec(i);//nächstes item
       end;
    end;
end;

ähh, hau mich nicht, wenn das zweite nicht auf Anhieb klappt, ist mir grad so eingefallen

Mfg Frank