ListBoxeinträge nach einem bestimmten Wort durchsuchen
Hi, wie kann man eine ListBox nach einem bestimten Wort durchsuchen?
Hier ein kleines Beispiel Wort das gesucht werden soll: Hallo ListBoxeinträge: usdshdhsduudhs dsdiiHallosmdsdk <- soll gefunden werden Hallo <- soll gefunden werden oskodosodkak Am besten wäre, wenn man alle ListBox-Einträge mit for runtergeht, da ich die alle Ergebnisse eh aus der ListBox löschen will. Jetzt schon mal danke für jede Antwort!! |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Hai St.Pauli,
Du hast dir ja die Antwort schon gegeben. Mit For Listbox.Count -1 downto 0 durch die Listbox laufen. Dann mit Pos prüfen ob das Wort in dem Eintrag vorhanden ist. |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Hallo St.Pauli,
Delphi-Quellcode:
Sollte selbsterklaerend sein. Als Rueckgabewert gibts die Anzahl der geloeschten Eintraege.
function DeleteStrings(ListBox: TListBox; Pattern: String; CaseSensitive: Boolean=True): Integer;
var DeleteEntry: Boolean; begin Result := 0; for i := ListBox.Count-1 downto 0 do begin if CaseSensitive then DeleteEntry := Pos(Pattern, ListBox.Items[i]) else DeleteEntry := Pos(LowerCase(Pattern), LowerCase(ListBox.Items[i])) if DeleteEntry then begin ListBox.Items.Delete(i); Result := Result+1; end; end; Greetz alcaeus |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Moin!
Alcaeus Code mit Fehlerbehebung:
Delphi-Quellcode:
- bei Pos die Ergebnisabfrage vergessen
function DeleteStrings(Items: TStrings; Pattern: String; CaseSensitive: Boolean=True): Integer;
var DeleteEntry: Boolean; begin Result := 0; for i := Items.Count-1 downto 0 do begin if CaseSensitive then DeleteEntry := (Pos(Pattern, Items[i]) > 0) else DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) > 0 ); if DeleteEntry then begin Items.Delete(i); Inc(Result); end; end; - ListBox.Items.Count anstatt ListBox.Count - Inc() beim Result inkrement - ListBox Abhängigkeit entfernt und auf TStrings umgestellt, somit auch für ComboBoxen, etc MfG Muetze1 |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Moin Muetze,
danke fuer die Korrekturen, das kommt davon wenn man IE-Programmierer ist ;) Diesen hier: Zitat:
Greetz alcaeus |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
hi, ich hab den code getestet jedoch werden die einträge die das wort enthalten gelöscht, und nicht die die es nicht enthalten..?
|
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Zitat:
Greetz alcaeus |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
@quakergod
Dann ändere in den Codezeilen mit pos das >0 in =0 und schon werden die Einträge gelöscht, die das Pattern nicht enthalten. MfG Binärbaum |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Zitat:
|
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
@Hansa:
Das gleiche steht doch schon einen Beitrag weiter oben. |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Es könnte sich um 61 Sek. handeln. 8)
Und hier steht es noch viel früher : http://www.delphipraxis.net/internal...692&highlight= :mrgreen: |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Delphi-Quellcode:
wenn ich die funktion so aufrufe:
function DeleteStrings(Items: TStrings; Pattern: String; CaseSensitive: Boolean=True): Integer;
var DeleteEntry: Boolean; i : integer; begin Result := 0; for i := Items.Count-1 downto 0 do begin if CaseSensitive then DeleteEntry := (Pos(Pattern, Items[i]) = 0) else DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) = 0 ); if DeleteEntry then begin Items.Delete(i); Inc(Result); end; end; end;
Delphi-Quellcode:
funktionierts ganz gut, nur wenn das wort in der listbox großgeschrieben ist löscht er es auch raus! :?
DeleteStrings(lb_streams.Items, edit_filter.Text, False);
|
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Wo ist denn DeleteEntry initialisiert worden ? Davon sehe ich nichts. :shock: Rufst du die Prozedur eventuell mehrmals auf ? "Result" ist als Funktionswert sehr bequem. Aber ich besetze lieber meine eigenen Werte. 8)
|
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Moin!
@quakergod: Die Procedure verhält sich vollkommen richtig, schliesslich sagst du ihr beim Aufruf das sie die Gross- und Kleinschreibung nicht beachten soll! Rufe die Procedure mit
Delphi-Quellcode:
auf und es klappt.
DeleteStrings(lb_streams.Items, edit_filter.Text, True);
MfG Muetze1 |
Re: ListBoxeinträge nach einem bestimmten Wort durchsuchen
Zitat:
Delphi-Quellcode:
DeleteEntry wird in JEDEM Fall intialisiert :zwinker:
if CaseSensitive then
DeleteEntry := (Pos(Pattern, Items[i]) = 0) else DeleteEntry := (Pos(LowerCase(Pattern), LowerCase(Items[i])) = 0 ); @quakergod: nachdem ich für CaseSensitive einen DefaultWert (=True) zugewiesen habe, brauchst du die Funktion auch nur mit 2 Parametern weglassen. Wenn der 3. Parameter True sein soll, lass ihn weg. Dann wird auch auf die Groß-/Kleinschreibung geachtet. Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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