Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   ListBox filtern (https://www.delphipraxis.net/131190-listbox-filtern.html)

cyanroot 20. Mär 2009 02:26


ListBox filtern
 
Hallo liebe Community,

ich wollte euch fragen, ob ihr wisst, wie man eine ListBox nach dem eingegeben Text eines Edits filtern kann.
Ich habe 150 Songs in einem Ordner und deren Namen kann ich in der FormCreate in die ListBox laden. Nun wäre es aber schön, wenn es über der ListBox ein Editfeld gibt, das im OnChange Ereignis nur die entsprechenden Songnamen in der ListBox anzeigt. Also zum Beispiel:

- das gesuchte Lied heisst "Beatles - I Me Mine"
- in der ListBox sind noch alle Lieder drin, da das Program gerade erst gestartet wurde

Bis dahin komm ich ;). Nun aber, gebe ich IRGENDWAS ein, was im o.g. Lied vorkommt, also z.B.:

"i me" oder "Beatles"

Jetzt sollte im ersten Fall nur noch "Beatles - I Me Mine" in der ListBox stehen und im zweiten Fall
jeder Beatles Lied (ja, "Beatles" steht in jedem Liednamen). Ausserdem müsste er, wenn ich danach nach einem anderen Lied suche, die gewünschten anzeigen (also nicht, dass er beim Suchen die Einträge rauslöscht, sondern eben "echt" filtert).

Könnt ihr mir dabei helfen? Ich weiss echt nicht wo ich anfangen soll.

Danke

jaenicke 20. Mär 2009 02:48

Re: ListBox filtern
 
Du hast im Hintergrund ja eine Liste, die du dann in der ListBox anzeigst. Und wenn sich etwas im Editfeld ändert, dann wiederholst du das Eintragen und filterst dabei mit dem Inhalt des Editfelds.

Oder missbrauchst du die ListBox zur Datenspeicherung und verwendest die Daten daraus weiter? Das klappt dann natürlich nicht. Du musst die Liste unabhängig von der Anzeige im Programm speichern, je nach Art der Daten in einer TStringList oder einer TObjectList zum Beispiel.

cyanroot 20. Mär 2009 02:53

Re: ListBox filtern
 
Also die Liste holt sich den Inhalt aus einem angegebenen Ordner. Dort leigen nur mp3's und diese werden ohne Probleme in der ListBox angezeigt. Jetzt möchte ich die aber realtime filtern. Geht das irgendwie?

jaenicke 20. Mär 2009 02:56

Re: ListBox filtern
 
Naja, du liest die Liste der MP3s in eine TStringList aus und gehst die Einträge dann durch und trägst die in die ListBox ein, wenn sie passen. Wenn nix im Editfeld steht (z.B. beim Programmstart), dann ignorierst du das Editfeld und trägst immer ein.

Sinnvoll wäre später dann auch vielleicht gleich weitere Infos aus dem MP3s auszulesen. Die ID3 Tags usw. meine ich. Aber diese müssten dann auch gespeichert werden, weil das Auslesen bei jedem Programmstart zu lange dauert.

cyanroot 20. Mär 2009 03:01

Re: ListBox filtern
 
Sorry, ich verstehs nicht. Könntest Du mir bitte einen kurzen Beispiel Code zeigen, für ein Edit1.OnChange Event? Ab da soll er ja filtern. Vielen Dank im Vorraus.

jaenicke 20. Mär 2009 03:38

Re: ListBox filtern
 
Delphi-Quellcode:
SearchText := EditX.Text;
ListBoxX.Items.Clear;
for i := 0 to MyStringList.Count - 1 do
  if (SearchText = '') or (Pos(SearchText, MyStringList[i]) > 0) then
    ListBoxX.Items.Add(MyStringList[i]);

cyanroot 20. Mär 2009 12:25

Re: ListBox filtern
 
Danke, das klappt wunderbar ;),


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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