![]() |
Suche im ListView
Hey Leute,
ich habe ein Programm geschrieben wofür ich eine Suchenfunktion noch brauch. Ich benutze zur Auflistung eine ListView Element. Könnt mir bei der Umsetzung helfen, wäre nett. MFG EvoX |
AW: Suche im ListView
Guck dir mal das Tutorial auf dieser Seite an:
![]() |
AW: Suche im ListView
ListView <> TreeView. Ich nehme mal an, ViewStyle ist auf vsReport gestellt, richtig? In dem Fall könnte man einfach über die Items iterieren und vergleichen (für die erste Spalte), für Folgespalten dann über die SubItems, wobei die zweite Spalte SubItems[0] entspricht.
|
AW: Suche im ListView
Aber im Allgemeinen sollte man Anzeigekomponenten nicht als Datenspeicher missbrauchen.
|
AW: Suche im ListView
ja genau so habe ich das gemacht. ah okay wusste ich nciht das man das so machen werde ich mal ausprobieren
|
AW: Suche im ListView
Das einfachste wäre eine TVirtualStringTree zu benutzen. Dann kannst du unpassende Einträge schlicht unsichtbar machen.
|
AW: Suche im ListView
Zitat:
![]() |
AW: Suche im ListView
Evtl. gibt es bessere Methoden, aber hier etwas auf die Schnelle mit Suche in Objekten. Die Infos liegen in Objekten die an Data hängen, Caption & Co dienen nur der Anzeige.
Delphi-Quellcode:
Und nein, ich hab mir jetzt nicht die große Mühe gemacht. Den Code habe ich in Form (mit leichten Anpassungen) in der letzten Woche schon zwei mal gepostet.
type
TInfo = class Name: String; Ort: String; end; {Gibt den X-ten Teilstring eines mit Kommas getrennten Daten-Strings} function ExtractSubStr(Str: String; Index: Integer): String; var i: Integer; begin Result := ''; if Index < 1 then Exit; Str := Str + ','; for i := 1 to Index - 1 do Delete(Str, 1, Pos(',', Str)); Result := Trim(Copy(Str, 1, Pos(',', Str) - 1)); end; procedure TForm1.FormCreate(Sender: TObject); procedure SetInfo(s: String; var Info: TInfo); begin Info := TInfo.Create; Info.Name := ExtractSubStr(s, 1); Info.Ort := ExtractSubStr(s, 2); end; var Info: TInfo; MyColumn: TListColumn; MyItem: TListItem; i: Integer; begin with ListView1 do begin ViewStyle := vsReport; MyColumn := Columns.Add; MyColumn.Caption := 'Name'; MyColumn := Columns.Add; MyColumn.Caption := 'Ort'; //Zuerst für Beispiel mit Daten füllen, hier jedoch nur Daten-Objekt in Data SetInfo('Anna, Köln', Info); MyItem := Items.Add; MyItem.Data := Info; SetInfo('Kristina, München', Info); MyItem := Items.Add; MyItem.Data := Info; SetInfo('Sonja, Berlin', Info); MyItem := Items.Add; MyItem.Data := Info; SetInfo('Petra, Frankfurt', Info); MyItem := Items.Add; MyItem.Data := Info; SetInfo('Berbel, Lübeck', Info); MyItem := Items.Add; MyItem.Data := Info; //Daten aus Info in Caption und SubItems übertragen for i := 0 to ListView1.Items.Count - 1 do begin Info := TInfo(Items[i].Data); Items[i].Caption := Info.Name; Items[i].SubItems.Add(Info.Ort); end; end; end; //suchen im Daten-Objekt procedure TForm1.Button1Click(Sender: TObject); var Info: TInfo; s: String; i: Integer; begin s := InputBox('Eingabe', 'Namen eingeben', ''); with ListView1 do begin for i := 0 to ListView1.Items.Count - 1 do begin Info := TInfo(Items[i].Data); if SameText(Info.Name, s) then ShowMessage('Namen gefunden im Item: ' + IntToStr(i)); end; end; end; procedure TForm1.FormDestroy(Sender: TObject); var i: Integer; begin with ListView1 do for i := 0 to Items.Count - 1 do TInfo(Items[i].Data).Free; end; |
AW: Suche im ListView
Zitat:
|
AW: Suche im ListView
Ne, mach es besser, dann nutze ich deinen ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz