AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In ListView suchen

Ein Thema von dopeline · begonnen am 13. Jul 2004 · letzter Beitrag vom 13. Jul 2004
Antwort Antwort
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#1

In ListView suchen

  Alt 13. Jul 2004, 14:10
Hallo!

Ich habe ein ListView mit 5 Spalten. Ich möchte nach einem String/bzw. Teilstring suchen. Jedoch funktioniert es nicht so, wie ich es mir vorgestellt habe:
Delphi-Quellcode:
var
  BackZeile,zeile,spalte:integer;
  weiter:boolean;

...

procedure Suche (SuchString:String; ListView:TListView; Zeile:Integer; Button:TButton);
var r,c:integer;
    gefunden:boolean;
begin
  begin
   gefunden:=False;
    if trim(SuchString) <> 'then
     begin
      For r:=zeile to ListView.Items.Count-1 do
       For c:=0 to ListView.Columns.Count-1 do
        If (AnsiPos(LowerCase(SuchString),LowerCase(ListView.Items.Item[r].SubItems.Strings[c])) <> 0) then
         begin
          gefunden:=True;
          zeile:=r+1;
          Button.Caption:='Weitersuchen';
          BackZeile:=zeile;
          exit;
         end;
      if not gefunden then MessageDlg('" '+SuchString+'" wurde nicht gefunden', mtInformation, [mbOK],0);
     end
    else MessageDlg('Das Eingabefeld ist leer', mtInformation, [mbOK],0);
  end;
end;

procedure TForm4.Button1Click(Sender: TObject);
begin
Suche(Esuche.Text,Form1.ListView1,zeile,Button1);
zeile:=BackZeile;
end;
Hat jemand einen funktionierenden Suchalgorithmus für ein Listview?

Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: In ListView suchen

  Alt 13. Jul 2004, 14:34
Erstmal erklär uns bitte was nicht funktioniert so wie du es willst. Ich habe auf den ersten Blick keinen Fehler gefunden.

Zweitens, du suchst nicht in der Caption der einzelnen Items. Dies solltest du hinzufügen, falls es für dich von Relevanz ist. Falls nicht, dann will ich nichts gesagt haben.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: In ListView suchen

  Alt 13. Jul 2004, 15:05
Er gibt eine Fehlermeldung aus:

Im Projekt FilmArchiv.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (4)'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Den Suchalgorithmus war ursprünglich eine StringGrid-Suche. Ich dachte mir schon, dass es nict mit einem ListView funktioniert. Es muss doch aber eine Möglichkeit geben, ein Listview zu durchsuchen! Man muss doch das Rad nicht 2x erfinden...

Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: In ListView suchen

  Alt 13. Jul 2004, 15:21
Hai dopeline,

Du solltest schon einmal vermeiden das locale Variablen und globale die selbe Bezeichnung haben
Delphi-Quellcode:
var
  BackZeile,zeile,spalte:integer;
...
procedure Suche (SuchString:String; ListView:TListView; Zeile:Integer; Button:TButton);
..
          zeile:=r+1;
.
.
Aber der Fehler dürfte hier liegen:
For c:=0 to ListView.Columns.Count-1 do .Columns.Count gibt dir die Anzahl der Spalten zurück (bei 0 beginnend). Du greifst aber "nur" auf die SubItems zu. Also musst Du die erste Spalte auch noch abziehen.
For c:=0 to ListView.Columns.Count - 2 do
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#5

Re: In ListView suchen

  Alt 13. Jul 2004, 15:26
Ich denke der Fehler liegt in den Subitems

du hast 5 Spalten. und die Werte dafür sind wie folgt verteilt:

Delphi-Quellcode:
1. Spalte ==> ListView.Items.Item[r].Caption
2. Spalte ==> ListView.Items.Item[r].SubItems.Strings[0]
3. Spalte ==> ListView.Items.Item[r].SubItems.Strings[1]
4. Spalte ==> ListView.Items.Item[r].SubItems.Strings[2]
5. Spalte ==> ListView.Items.Item[r].SubItems.Strings[3]
du hingegen gehst die SubItems.Strings[] von 0 bis 4 durch. und SubItems.String[4] existiert nicht, ausserdem lässt du dabei die erste Spalte weg.

Delphi-Quellcode:

// Spalte 1 durchsuchen
If (AnsiPos(LowerCase(SuchString),LowerCase(ListView.Items.Item[r].Caption)) <> 0) ...

// Spalten 2-5 durchsuchen
For c:=0 to ListView.Items.Item[r].SubItems-1 do
...
Wenn du deinen Sourcecode so änderst müsste es klappen
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: In ListView suchen

  Alt 13. Jul 2004, 15:27
Oder um ganz sicher zu gehen:
For c:=0 ListView.Items.Item[r].SubItems.Count-1 do Weil nicht jede Subitems-Liste unbedingt mit Daten gefüllt sein muss.

EDIT: Ups, schon wieder zu langsam...
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: In ListView suchen

  Alt 13. Jul 2004, 20:17
Es funktioniert! Vielen Dank! Es lag an der Spalte, die zu viel war...

Diese Suchfunktion wird auf einem anderen Formular ausgeführt, welches zuvor mit ShowModal aufgerufen wurde. Wenn ein Eintrag gefunden wird, wird er markiert: ListView.items.Item[r].Selected:=True;
Allerdings sieht man das nicht, da immer noch das SuchFormular gezeigt wird. Wenn ich dieses jedoch mit Show aufrufe und die suche starte, verschwindet das Suchfenster und in der ListView auf dem Hauptformular wird die entsprechende Zeile markiert. Gibt es eine Möglichkeit, das Suchformular immer im Vordergrund zu halten, auch wenn man auf dem Hauptformular arbeitet?

//EDIT Hat sich erledigt: FormStyle:fsStayOnTop

Gruß, dopeline
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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