duplikate in stringlisten ausschließen - _property "Duplicates" nicht erkannt
-
hallo allesamt,
habe den wunsch, die strings einer ListBox duplikatfrei zu halten. beim suchen bin ich (natürlich) auf die Eigenschaft "Duplicates" gestoßen, die in der BCB-Hilfe wunderbar nach der Lösung meines Problems aussieht. Leider existiert sie anscheinend jedoch nicht für alle StringLists...
Ich habe hier im Forum dann noch folgendes entdeckt:
const TStringList *temp = new TStringList; temp->Duplicates = dupIgnore;was so allein auch funktioniert. Leider kann ich jedoch wie gesagt nicht folgendes machen:
ListBox->Items->Duplicates = dupIgnore;denn da wirft der Compiler mal eben
E2316 'Duplicates' ist kein Element von 'TStrings'Dann kam mir der Gedanke, ich könnte ja einfach eine
const TStringList* m_SL;als Variable meiner Form deklarieren, dieser dann Duplicates = dupIgnore zuweisen und dann einfach
ListBox->Items = m_SL;machen, aber nein! Hier gibts gleich zwei Fehler:
[C++ Fehler] TOptions.cpp(58): E2024 const-Objekt kann nicht modifiziert werden [C++ Fehler] TOptions.cpp(59): E2034 Konvertierung von 'const TStringList *' nach 'TStrings *' nicht möglichWas kann ich tun?
Freue mich über jeden Hinweis

der oli
-
Wirfst Du da TStringList und TStrings ein bißchen durcheinander? TStrings ist keine TStringList, sondern TStringList enthält TStrings. Diese kannst Du anderen Komponenten zuweisen.
Des Rätsels Lösung:
ListBox->Items = m_SL->Strings;
-
Joe_M. schrieb:
TStrings ist keine TStringList, sondern TStringList enthält TStrings.
Das ist so nicht richtig. TStringList erbt von TStrings, man könnte also sagen: TStringList ist ein TStrings (klingt ein bisschen blöd).
Zum eigentlichen Problem:
Wie wäre es, wenn Du ein TStringList-Objekt erstellst, dort die Duplicates-Eigenschaft nach Belieben setzt und anschließend den Inhalt
der ListBox zuweist:TStringList* tempList = new TStringList(); tempList->Sorted = true; tempList->Duplicates = dupIgnore; tempList->Add("1234"); // usw. ListBox->Items->Assign(tempList);Allerdings musst Du dann natürlich parallel die String-Liste mitführen.
Gruß,
Alexander
-
Hallo,
Korrekterweise muss man sagen, dass TStringList von TStrings abgeleitet ist und nicht das sie sie enthält.
@Joe_M
Produzierst du hier nicht ein Speicherleck, wenn du den Orginalpointer Items von TListBox einfach überschreibst?
Wie wäre es mitListBox->Items->Assign(m_SL);[Edit]Zu spät
[\Edit]
-
äh ja, das gibt ein Speicherleck...

Ich meinte das hier:
ListBox1->Items->AddStrings(slTemp->Strings);Sorry...