Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Suche in TListView - Zugriffsverletzung? (https://www.delphipraxis.net/71759-suche-tlistview-zugriffsverletzung.html)

robinWie 20. Jun 2006 18:19


Suche in TListView - Zugriffsverletzung?
 
Hallo,
ich verusuche in meinen Programm eine Suchfunktion für eine TListView einzubauen, die Dateien anzeigt. Das ganze soll so wie bei der Winamp Media-Library sein. Also das nur die Einträge angezeigt werden, die das gesuchte Wort beinhalten.
Aber ich erhalte immer eine Zugriffsverletzung

Hier der Code:
Delphi-Quellcode:
procedure TMainForm.Search_edtChange(Sender: TObject);
var
  i: integer;
  FOUND: Boolean;
begin
  if Seach_edt.Text <> '' then
    begin
      for i := 0 to FileList.Items.Count -1 do
        begin
          FOUND := AnsiCompareText(FileList.Items[i].Caption, Search_edt.Text) = 0;
          if not FOUND then
            FileList.Items[i].Delete;
        end;
    end;
end;
ich habe mir einen klienen Teil des Codes hier "geklaut"

Weiss jemand rat?

Robin

SirThornberry 20. Jun 2006 18:21

Re: Suche in TListView - Zugriffsverletzung?
 
lass deine schleife andersherum laufen und es sollte funktionieren. Dadurch das du Einträge raus löschst greifst du am ende der Schleife auf Items zu die gar nicht mehr existieren.

robinWie 20. Jun 2006 18:26

Re: Suche in TListView - Zugriffsverletzung?
 
Jetzt kommt kein Fehler mehr - aber passieren tut auch nix :gruebel:

Hawkeye219 20. Jun 2006 18:30

Re: Suche in TListView - Zugriffsverletzung?
 
Hallo Robin,

solltest du nicht besser Delphi-Referenz durchsuchenAnsiContainsText benutzen?

Gruß Hawkeye

robinWie 21. Jun 2006 18:06

Re: Suche in TListView - Zugriffsverletzung?
 
Irgendwie bin ich zu inkompetent :lol:

Habs mal mit einer Repeat-Schleife probiert. Das Ergebniss: Zugriffsverletzung :evil: :evil:
Delphi-Quellcode:
i := 0;
repeat
  if UpperCase(FileList.Items[i].Caption) <> UpperCase(Search_Word) then
    FileList.Items.Delete(i);
  i := i+1;
until i = FileList.Items.Count -1;

Hawkeye219 21. Jun 2006 18:15

Re: Suche in TListView - Zugriffsverletzung?
 
SirThornberry hat dir doch schon erklärt, warum die Schleife rückwärts laufen muß.

Mit der Funktion AnsiCompareText vergleichst du immer vollständige Einträge. Deshalb mein Verweis auf die Funktion AnsiContainsText.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.

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