![]() |
Listbox durchsuchen
Ich würde gerne eine Listbox durchsuchen, allerdings ohne Items zu löschen oder ein extra Editfeld.
Der Nutzer soll einfach sein Suchwort eintippen und die Listbox springt dann automatisch zum ersten Item dessen String das Suchwort enthält. Das funktioniert eigentlich auch ganz gut indem man einfach das Suchwort zwischenspeichert und bei jedem OnKeyPress den neuen char hinten anhängt und dann den ItemIndex auf das erste Item setzt dessen String das Suchwort enthält. Allerdings funkt mir dann immer so ein doofer Automatismus der Listbox dazwischen: Wenn ein Itemstring mit dem gedrückten char beginnt setzt er den ItemIndex automatisch dahin und zwar total unabhängig davon was ich in OnKeyPress, OnKeyDown oder OnKeyUp mache. Kann man das irgendwie abschalten? |
Re: Listbox durchsuchen
Ich bin nicht sicher, aber bringt es etwas, wenn Du es mit BeginUpdate und EndUpdate versuchst? Pseudocode:
Delphi-Quellcode:
Wie gesagt, nur eine ungetestete Idee.
procedure TDeinForm.ListBoxKeyPress(Sender: TObject; var Key: Char);
begin ListBox.Items.BeginUpdate; try StringVar := StringVar + Key; ... finally ListBox.Items.EndUpdate; end; end; |
Re: Listbox durchsuchen
Delphi-Quellcode:
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
begin Key := #0; end; |
Re: Listbox durchsuchen
Ok, eigentlich hatte ich das schon durchprobiert, aber wohl nur bei KeyDown und KeyUp weil dort funktioniert es nicht, aber bei OnKeyPress geht es. Danke.
|
Re: Listbox durchsuchen
Hallo,
ich habe ein ähnliches Problem, deshalb hänge ich es mal hier mit dran. Ich lade eine datei in eine Listbox mit
Delphi-Quellcode:
jetzt muss ich jede zeile der listbox nach einem bestimmten schlüsselwort durchsuchen und wenn dieses vorhanden ist, soll die zeile leben bleiben, wenn nicht kann sie gelöscht werden...
procedure TForm1.Button1Click(Sender: TObject);
begin try listbox1.Items.LoadFromFile('G:\Datei.datei'); except showmessage('laden ging schief'); end; ich habe das so versucht:
Delphi-Quellcode:
dabei kommt aber nichts vernünftiges raus - vermutlich weil ich in der zeile mit dem indexof es nicht hinbekomme, das er auch nur in der zeile i sucht...
procedure TForm1.Button2Click(Sender: TObject);
var Zeilenzahl:Integer; i:integer; kandidat:integer; begin Zeilenzahl:=listbox1.items.count; for i := 0 to Zeilenzahl - 1 do begin kandidat:= ListBox1.Items.IndexOf('schlüsselwort'); if kandidat <0 then Listbox1.items.delete(i); end; end; wie ihr merkt kenne ich mich nicht wirklich aus und das ist meine erste tlistbox überhaupt... über anfängerfreundliche Antworten (leicht verständlich) freue ich mich wie immer sehr! Gruß |
Re: Listbox durchsuchen
IndexOf durchsucht auch die komplette Liste und findet auch nur komplette Zeilen. Du musst also Zeile für Zeile suchen, z.B. mit Pos()
|
Re: Listbox durchsuchen
|
Re: Listbox durchsuchen
Und tu dir selbst den Gefallen und durchlaufe die ListBox nicht von vorne nach hinten, sondern von hinten nach vorne. ;) Sonst ist die Exception schon vorprogrammiert :zwinker:
|
Re: Listbox durchsuchen
Da er eigentlich nicht löschen will (
Zitat:
|
Re: Listbox durchsuchen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 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