Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi doppelte Einträge verhindern beim öffnen mit OpenDialog (https://www.delphipraxis.net/76829-doppelte-eintraege-verhindern-beim-oeffnen-mit-opendialog.html)

newuser01 10. Sep 2006 18:22


doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Hallo

Ich möchte gerne verhindern das wenn ich mit Opendialog Dateien öffne und in der ListBox eintragen lasse diese doppelt erscheinen

folgendes hab ich bereits versucht finde aber den Fehler nicht :(

Delphi-Quellcode:

var i,j,k: Integer;
slTmp:TStringList;
begin

slTmp := TStringList.Create;
slTmp.Clear;

try
  if OpenDialog2.Execute then
  begin

   for i := 0 to OpenDialog2.Files.Count - 1 do
   begin
    slTmp.Add(OpenDialog2.Files[i]);
   end;//for
   end;//if


        for j := 0 to slTmp.Count -1 do
        begin
          if slTmp.Strings[j] = lbAusgabe.Items.Strings[j] then
          begin
          slTmp.Delete(j);
          end;
        end;//for

        for k := 0 to slTmp.Count -1 do
        begin
          lbAusgabe.Items.Add(slTmp.Strings[k]);
        end;//for



except
end;//try


end;

Gruß
Holger

mkinzler 10. Sep 2006 18:25

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
In einer FileListe eines OpenDialogs dürften eigentlich keinen doppelten Einträge sein.

newuser01 10. Sep 2006 18:28

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
nein ich meinte wenn in der ListBox schon die selbe Datei sein sollte wie die die ich öffnen möchte das soll verhindert werden also das 2. die gleiche Datei in der ListBox erscheint

mkinzler 10. Sep 2006 18:36

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Dann würde ich schon das Einbinden des Trings unterbinden:
Delphi-Quellcode:
for i := 0 to OpenDialog2.Files.Count - 1 do
begin
    if slTmp.IndexOf(OpenDialog2.Files[i]) <> 0 then slTmp.add( OpenDialog2.Files[i]);

marabu 10. Sep 2006 18:37

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Oder so:

Delphi-Quellcode:
procedure TDemoForm.AddButtonClick(Sender: TObject);
var
  i: Integer;
begin
  with OpenDialog, ListBox do
    if Execute then
    begin
      Items.BeginUpdate;
      for i := 0 to Pred(Files.Count) do
        if Items.IndexOf(Files[i]) < 0 then
          Items.Add(Files[i]);
      Items.EndUpdate;
    end;
end;
Grüße vom marabu

newuser01 10. Sep 2006 18:52

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
DANKE !!!

Cyberbob 10. Sep 2006 19:05

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Wobei hier die Variante mit dem IndexOf zu bevorzugen wäre, da diese bei vielen Dateien und vielen Einträgen in der Liste schneller arbeitet, als das jedesmal bei einer neuen Datei die ganze Liste mit einer For-Schleife durchlaufen werden muss.

mkinzler 10. Sep 2006 19:08

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Zitat:

Zitat von Cyberbob
Wobei hier die Variante mit dem IndexOf zu bevorzugen wäre, da diese bei vielen Dateien und vielen Einträgen in der Liste schneller arbeitet, als das jedesmal bei einer neuen Datei die ganze Liste mit einer For-Schleife durchlaufen werden muss.

Es arbeiten aber beide Versionen mit .IndexOf ;-) Du meinst aber wohl Achims Methode.

Cyberbob 10. Sep 2006 19:20

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
Uups, mein Fehler!
Einfach ignorieren

newuser01 10. Sep 2006 19:46

Re: doppelte Einträge verhindern beim öffnen mit OpenDialog
 
und wie sieht es aus wenn ich zb: ein ganzes Verzeichnis mit DirectoryListBox in die ListBox übernehme und dieses Verzeichnis 2 mal übernommen werden sollte (doppelt)?


Delphi-Quellcode:

procedure TfVerzeichnis.btnOKClick(Sender: TObject);
var
  I: Integer;
  slTmp: TStringList;
begin

slTmp := TStringList.Create;
slTmp.Clear;
btnOK.Font.Color := clRed;
btnOK.Caption := 'bitte warten...';
FindAllFiles(slTmp,DirectoryListBox1.Directory+'\','*.mp3', true, true, false);
btnOK.Font.Color := clBlack;
btnOK.Caption := 'OK';


for I := 0 to slTmp.Count - 1 do
begin
Form1.lbAusgabe.Items.Add(slTmp.Strings[i]);
end;

slTmp.Free;
fVerzeichnis.Close;

end;

Gruß
Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz