Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listbox durchsuchen (https://www.delphipraxis.net/143317-listbox-durchsuchen.html)

Shubit 13. Nov 2009 09:30


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?

DeddyH 13. Nov 2009 11:49

Re: Listbox durchsuchen
 
Ich bin nicht sicher, aber bringt es etwas, wenn Du es mit BeginUpdate und EndUpdate versuchst? Pseudocode:
Delphi-Quellcode:
procedure TDeinForm.ListBoxKeyPress(Sender: TObject; var Key: Char);
begin
  ListBox.Items.BeginUpdate;
  try
    StringVar := StringVar + Key;
    ...
  finally
    ListBox.Items.EndUpdate;
  end;
end;
Wie gesagt, nur eine ungetestete Idee.

toms 13. Nov 2009 11:51

Re: Listbox durchsuchen
 
Delphi-Quellcode:
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := #0;
end;

Shubit 13. Nov 2009 14:55

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.

Nelphin 4. Dez 2009 06:36

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:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
listbox1.Items.LoadFromFile('G:\Datei.datei');
except
showmessage('laden ging schief');
end;
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...

ich habe das so versucht:

Delphi-Quellcode:
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;
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...

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ß

mkinzler 4. Dez 2009 06:40

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()

RWarnecke 4. Dez 2009 06:42

Re: Listbox durchsuchen
 
Statt mit IndexOf, würde ich hier mit der Funktion Delphi-Referenz durchsuchenPos oder Delphi-Referenz durchsuchenPosEx arbeiten.

leddl 4. Dez 2009 06:50

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:

mkinzler 4. Dez 2009 06:52

Re: Listbox durchsuchen
 
Da er eigentlich nicht löschen will (
Zitat:

allerdings ohne Items zu löschen
) sollte das egal sein

leddl 4. Dez 2009 06:53

Re: Listbox durchsuchen
 
Zitat:

Zitat von mkinzler
Da er eigentlich nicht löschen will (
Zitat:

allerdings ohne Items zu löschen
) sollte das egal sein

Trink noch nen Kaffee und lies dir den Thread danach nochmal durch :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Seite 1 von 2  1 2      

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