2016-06-25 19 views
-2

Mit Openmultiselect-Option eingeschaltet, ich Dateien hinzufügen:Listbox Löschen vorhandenen Inhalte auf neue hinzufügen

procedure TForm2.cxButton2Click(Sender: TObject); //add files 
begin 
if OpenDialog1.Execute then 
    ListBox1.Items.Assign(OpenDialog1.Files); 
end; 

Aber, wenn ich eine Datei mehr angehängt werden soll, löscht das Hinzufügen der vorherigen Liste, die aufgeführt wurde listbox.This ist wahrscheinlich von Design, aber wie kommst du darüber hinweg?

Gibt es auch eine Möglichkeit, doppelte Einträge zu vermeiden?

+1

Sie rufen nicht Add ... ...... Haben Sie Ihren Code gelesen? –

Antwort

5

TStrings.Assign ersetzt, was auch immer es mit den neuen Inhalten gibt. Es fügt nicht hinzu.

Um ein einzelnes Element hinzuzufügen, verwenden Add:

if OpenDialog1.Execute then 
    ListBox1.Items.Add(OpenDialog1.FileName); 

Verwenden AddStrings mehrere Artikel auf einmal hinzufügen, während halten, was schon da ist:

if OpenDialog1.Execute then 
    ListBox1.Items.AddStrings(OpenDialog1.Files); 

Leider TListBoxItems nicht hat TStringLists Duplicates-Eigenschaft, so dass es keine einfache Möglichkeit gibt, Duplikate zu verhindern. Wenn Sie nur jeweils ein einzelnes neues Element hinzufügen, können Sie einfach manuell prüfen, ob es bereits vorhanden ist.

if OpenDialog1.Execute then 
    if ListBox1.Items.IndexOf(OpenDialog1.FileName) = -1 then 
    ListBox1.Items.Add(OpenDialog1.FileName); 

Wenn Sie mehrere Elemente hinzufügen und wollen um Duplikate zu vermeiden, können Sie einen Zwischen TStringList verwenden; es wird jedoch den (möglicherweise unerwünschten) Nebeneffekt haben, die Artikel zu sortieren.

var 
    SL: TStringList; 
begin 
    if OpenDialog1.Execute then 
    begin 
    SL := TStringList.Create; 
    ListBox1.Items.BeginUpdate; 
    try 
     SL.Sorted := True; // Required in order to use Duplicates 
     SL.Duplicates := dupIgnore; 
     SL.Assign(ListBox1.Items); 
     SL.AddStrings(OpenDialog1.Files); 
     ListBox1.Items.Assign(SL); 
    finally 
     SL.Free; 
     ListBox1.Items.EndUpdate; 
    end; 
    end; 
end; 
+0

OpenDialog1 hat keine FileNames-Eigenschaft. – user763539

+1

@ user763539 Wäre es nicht effizienter für Sie, einfach die Dokumentation zu lesen? Oder sogar Ihren eigenen Code, wo Sie den einfachen Fehler gesehen haben könnten. Es ist, als hättest du nicht einmal den Code gelesen, den Ken geschrieben hat, und versucht, es zu verstehen. Sehen Sie diese Site als Codequelle zum Einfügen ohne Lesen an? Wir helfen gerne Menschen, aber wirklich, Sie machen hier keine nennenswerten Anstrengungen. Versuche es noch mal. –

+0

Sie haben absolut recht. Tippfehler. Korrigiert an beiden Stellen. –

Verwandte Themen