Autor |
Beitrag |
s4lzh3r1ng
      
Beiträge: 38
|
Verfasst: So 04.08.02 19:49
Hallo zusammen !
Weiß jemand wie ich in einer Listbox suchen kann, ob ein Eintrag
vorhanden ist ?
_________________  s4lzh3r1ng
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: So 04.08.02 20:51
Hallo s4lzh3r1ng,
bist du beim Eingeben deines Namens von der Tastaur abgerutscht  ?
Zu deiner Frage. Die ListBox hat eine Eigenschaft Items vom Typ TString. Und dort gibt es z.B. die Methode IndexOf:
Quelltext 1: 2: 3: 4: 5:
| index := ListBox1.Items.IndexOf('suchstr'); if index > -1 then ShowMessage('Es handelt sich um den '+IntToStr(index+1)+'-ten Eintrag') else ShowMessage('Eintrag existiert nicht.'); |
_________________ Live long and prosper
MrSpock \\//
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: So 04.08.02 21:16
Jo, danke erst mal für die Antwort. Das wars was ich suchte.
Das mit demnamen soll natürlich so sein .... 
_________________  s4lzh3r1ng
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: So 04.08.02 21:58
Hmm, ist es auch möglich das nur Teile des Eingegebenen Suchstrings dem Inhalt in der Listbox entsprechen müssen ?
Wie könnte man das programmieren ?
Weiß das jemand ?
_________________  s4lzh3r1ng
|
|
LordZero
Hält's aus hier
Beiträge: 7
|
Verfasst: So 04.08.02 22:43
Also wenn du nur einen Teilstring suchen willst, würde es auf alle fälle mal so gehen. Ob es dazu schon ein vohandene Methode der Komponente gibt weiß ich nicht ...
Aber so gehts wohl:
Quelltext 1: 2: 3: 4: 5:
| For Run := 0 to ListBox.ItemCount -1 do begin if not Pos(Suchstring, ListBox.Items[Run]) = 0 then ShowMessage('Ergebnis an ' + IntToStr(Run) + 'ter Position'); end; |
Hoffe das hat dir geholfen ...
Gruß
Werner
_________________ Habe mut zu denken - abgedroschen aber stimmt immer noch!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 04.08.02 22:57
Hi!
Wenn Du nur wissen willst, ob die Komponente mindestens einmal vorhanden ist, dann kannst du in obigen Quelltext eigentlich nach dem ersten Vorkommen aufhören.
Quelltext 1: 2: 3: 4:
| run:=0; while (Pos(Suchstring, ListBox.Items[Run]) = 0) and (run<ListBox.ItemCount-1) do inc(run) if not Pos(Suchstring, ListBox.Items[Run]) = 0 then ShowMessage('Ergebnis an ' + IntToStr(Run) + 'ter Position'); |
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
LordZero
Hält's aus hier
Beiträge: 7
|
Verfasst: So 04.08.02 23:11
Nochmal ne idee - eigentlich nur um zu zeigen dass meine Methode genau so gut ist wie die vom Peter Lustig - fals man wirklich will dass man beim ersten Ergebnis schon aufhört!
Code:
Quelltext 1: 2: 3: 4: 5: 6:
| For Run := 0 to ListBox.ItemCount -1 do if not Pos(Suchstring, ListBox.Items[Run]) = 0 then begin ShowMessage('Ergebnis an ' + IntToStr(Run) + 'ter Position'); Break; // Unterbricht die For-Schleife end; |
@Peter Lustig:
Sorry will dich nicht kritisieren - is nur für mein Ego! 
_________________ Habe mut zu denken - abgedroschen aber stimmt immer noch!
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 04.08.02 23:24
Hi!
@LordZero
LordZero hat folgendes geschrieben: | @Peter Lustig:
Sorry will dich nicht kritisieren |
Auch das wäre kein Grund, sich zu entschuldigen!!!!
Zu Deinem Code:
Macht genau das gleiche wie meiner, ist aber kürzer und übersichtlicher  besser.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
LordZero
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 05.08.02 15:31
@Peter Lustig
Ich denke eigentlich das mein Code übersichtlicher ist als Deiner. Ist nicht so ne große while Schleife - aber das ist dann wohl Geschmackssache!
Das er das selbe mach war mir schon auch irgendwie klar!!!
_________________ Habe mut zu denken - abgedroschen aber stimmt immer noch!
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: Mo 05.08.02 16:31
vielen Dank ihr beiden !
werd's mal ausprobieren . . .
_________________  s4lzh3r1ng
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: Mo 05.08.02 17:11
äh, nichts für ungut aber wenn ich euren Code verwende tut sich überhaupt nichts mehr, er findet den Suchstring nicht mal dann wenn ich ihn in voller Länge eingebe . . .
Quelltext 1: 2: 3: 4: 5:
| For Run := 0 to form1.ListBox1.Items.Count -1 do begin if not Pos(edit1.Text, form1.ListBox1.Items[Run]) = 0 then ShowMessage('Ergebnis an ' + IntToStr(Run) + 'ter Position'); end; |
Den Aufruf Listbox1.itemcount gabs auch nich,also musste ich Item.Count verwenden . Woran liegts das das nicht funktioniert ???
_________________  s4lzh3r1ng
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 05.08.02 17:59
@LordZero:
Zitat: | Ich denke eigentlich das mein Code übersichtlicher ist als Deiner. Ist nicht so ne große while Schleife - aber das ist dann wohl Geschmackssache! |
Das meinte ich doch!!! Keiner versteht mich !!!!!
@s4lzh3r1ng:
Ich habe den Code aus Deinem letzten Posting mal in ein Projekt kopiert und er funktioniert tadellos! (Du hast das "break;" vergessen oder willst es nicht haben)
MfG,
Peter
P.S.: Soll ich Dir das Projekt (1 Editfeld, 1ListBox, 1Button) mal zuschicken?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 05.08.02 18:00
Habe vergessen: es sollte vielleicht besser heißen IntToStr(run+1), damit er mit der 1. und nicht mit der 0. Position beginnt!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: Mo 05.08.02 18:29
(verstehdieweltnichtmehr)
Es klappt bei mir nicht . . .
@Peter Lustig: Wär schon schön wenn du es mir mal zuschicken könntest.
Anscheinend bekomme ich das nicht hin . . .
_________________  s4lzh3r1ng
|
|
MrSpock
      
Beiträge: 262
|
Verfasst: Mo 05.08.02 19:34
Hallo s4lzh3r1ng,
die Funktion Pos sucht casesensitiv, unterscheidet also Groß- und Kleinschreibung. Könnte das der Grund sein, warum es bei dir nicht funktioniert?
_________________ Live long and prosper
MrSpock \\//
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: Mo 05.08.02 20:41
Keine Ahnung ob es daran gelegen hat,
Aber als mir Peter Lustig sein Programm zugemailt hat, lief es, naja
also vielen Dank Peter Lustig.
Aber die Option auch zwischen Groß und Kleinschreibung nicht zu unterschieden ist schön, wäre so etwas auch machbar ?
_________________  s4lzh3r1ng
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 05.08.02 20:55
Hi!
Du kannst mit zwei temporären Strings arbeiten, die
a.) den Inhalt von edit1.text in Großbuchstaben
b.) den Inhalt von form1.ListBox1.Items[Run] in Großbuchstaben
enthalten.
Diese Strings erzeugst du z.B. so:
Quelltext 1: 2:
| edit_temp:=''; for i:=1 TO Length(edit1.text) DO edit_temp:=edit_temp+UpCase(edit1.text[i]); |
Das gleiche machst Du dann jedesmal mit form1.ListBox1.Items[Run]. Dann suchst Du in b.) nach a.). Da beide nur noch Großbuchstaben enthalten, ist das ganze nicht mehr case-sensitive.
Am Besten erstellst Du Dir eine Funktion "UpCaseAll(st : String) : String",
die Dir den "großen" String erstellt!
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
s4lzh3r1ng 
      
Beiträge: 38
|
Verfasst: Mo 05.08.02 21:19
Ja, das ist es !!!
Ich danke allen Beteiligten für Ihren zahlreichen Beiträge,
jetzt ist mein Programm fertig !!
Vielen Dank und bis demnächst 
_________________  s4lzh3r1ng
|
|
Buggi
      
Beiträge: 35
|
Verfasst: Di 06.08.02 15:19
Titel: keine GROß / klein - Unterscheidung
Hi,
zur Groß/klein-Unterscheidung muß ich mal was anmerken.
Wenn ich nicht ganz falsch liege gibt es schon eine passende Routine, die
einen string komplett umwandelt: "AnsiLowerCase"
Der obige Code würde demnach so aussehen: Quelltext 1: 2: 3: 4: 5:
| For Run := 0 to form1.ListBox1.Items.Count -1 do begin if not Pos(AnsiLowerCase(edit1.Text), AnsiLowerCase(form1.ListBox1.Items[Run])) = 0 then ShowMessage('Ergebnis an ' + IntToStr(Run) + 'ter Position'); end; |
Gruß Buggi
_________________ Delphi 4, BDE, Paradox
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Di 06.08.02 16:47
Hey, stimmt! Die Funktion kannte ich noch nicht.
Um jetzt mal den überpeniblen Korinthenkacker zu spielen: hier müsste es AnsiUpperCase() heißen, damit alles groß wird. Aber für das eigentliche Problem ist es natürlich absolut egal.
MfG,
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|