Autor Beitrag
s4lzh3r1ng
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: So 04.08.02 19:49 
Hallo zusammen !

Weiß jemand wie ich in einer Listbox suchen kann, ob ein Eintrag
vorhanden ist ?

_________________
:wink: s4lzh3r1ng :wink:
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: So 04.08.02 20:51 
Hallo s4lzh3r1ng,

bist du beim Eingeben deines Namens von der Tastaur abgerutscht :mrgreen: ?

Zu deiner Frage. Die ListBox hat eine Eigenschaft Items vom Typ TString. Und dort gibt es z.B. die Methode IndexOf:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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 .... :wink:

_________________
:wink: s4lzh3r1ng :wink:
s4lzh3r1ng Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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 ?

_________________
:wink: s4lzh3r1ng :wink:
LordZero
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

ausblenden 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



BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 :arrow: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 05.08.02 16:31 
vielen Dank ihr beiden !

werd's mal ausprobieren . . .

_________________
:wink: s4lzh3r1ng :wink:
s4lzh3r1ng Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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 . . .
ausblenden 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 ???

_________________
:wink: s4lzh3r1ng :wink:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mo 05.08.02 18:29 
(verstehdieweltnichtmehr) :x
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 . . .

_________________
:wink: s4lzh3r1ng :wink:
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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 ?

_________________
:wink: s4lzh3r1ng :wink:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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 :wink:

_________________
:wink: s4lzh3r1ng :wink:
Buggi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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".