Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - listbox nach string durchsuchen
110022 - Mi 19.12.07 17:46
Titel: listbox nach string durchsuchen
ich möchte dass mein prgramm einen string aus nem editfeld in einer listbox such.
wenn es gefunden wurde wir es markiert, aber wie ??
Moderiert von
Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 19.12.2007 um 16:48
Christian S. - Mi 19.12.07 17:51
Hallo!
Schaue Dir mal die ListBox.Items.IndexOf-Methode an. Außerdem kannst Du über ListBox.Selected[idx] := true den Eintrag mit dem Index "idx" markieren.
Grüße
Christian
Silas - Mi 19.12.07 17:52
Wenn du jeweils nur ein Item markieren möchtest, geht das über ListBox.ItemIndex.
110022 - Mi 19.12.07 17:59
wie würde das denn aussehen?
in etwa so?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button10Click(Sender: TObject); var suchw:string; i: integer; begin suchw:=edit1.Text; for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then listbox1.itemindex; end; end;
end. |
aber ich bin mir sehr sicher dass alles falsch ist
Marc. - Mi 19.12.07 18:02
Hast Du dir
Christian S. Beitrag durchgelesen? :roll:
Die Zählung bei der Listbox beginnt übrigens bei 0, d.h. Deine Schleifen läuft wenn überhaupt nur bis count - 1.
//edit: Ich empfehle Dir zudem dringenst(!) Dir unbekannte Funktionen in der DOH nachzuschlagen. (Markieren + F1)
Grüße
Marc
110022 - Mi 19.12.07 18:10
hilft mir grade nich weiter.
wie gehts richtig?
muss morgen das info projekt fertig haben.
Marc. - Mi 19.12.07 18:18
Wie wäre es mit etwas Eigenständigkeit?
Du benötigst weder eine Schleife noch POS!
Was du brauchst sind lediglich:
• Listbox.Items.IndexOf();
• Listbox.ItemIndex
Das solltest Du nun aber verknüpfen können. ;)
cu
Marc
110022 - Mi 19.12.07 18:21
sry aber leider nich
Yogu - Mi 19.12.07 18:23
Marc. hat folgendes geschrieben: |
Die Zählung bei der Listbox beginnt übrigens bei 0, d.h. Deine Schleifen läuft wenn überhaupt nur bis count - 1. |
Er hat doch alles richtig gemacht, nur etwas umständlicher. Siehe hier:
110022 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2:
| for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then | |
Er zieht doch von der Index-Variable 1 ab.
Marc. - Mi 19.12.07 18:23
Zeig uns doch mal Deinen Ansatz. Wo hakt es denn? Was funktioniert nicht?
Zitat: |
sry aber leider nich |
Sagt leider nicht allzu viel aus. :nixweiss:
edit: Yogu, das habe ich schlichtweg ich überlesen. ;)
cu
Marc
110022 - Mi 19.12.07 18:28
Also:
ich habe das hier
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button10Click(Sender: TObject); var suchw:string; i: integer; begin suchw:=edit1.Text; for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then listbox1.itemindex; end; end;
end. |
und will das der text aus einem edit feld in der listbox gesucht und markiert wird.
wenn er nicht gefunden wird kommt ne kleine meldung.
Marc. - Mi 19.12.07 18:33
Den Code hast Du doch bereits gepostet und die Begriffe hast Du dir auch noch nicht angeschaut. :?
Delphi-Quelltext
1: 2: 3: 4:
| suchw:=edit1.Text; for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then Listbox1.itemindex := i - 1; |
Nun wird jeweils das letzte gefundende Element markiert!
Ich denke, das sollte als Denkanstoß reichen. :)
Grüße
Marc
Yogu - Mi 19.12.07 18:37
Folgender Code reicht doch vollkommen aus:
Delphi-Quelltext
1: 2:
| if ListBox.IndexOf(String) >= 0 then ListBox.ItemIndex := ListBox.IndexOf(String); |
Alle anderen Lösungen sind eigentlich unnötig kompliziert.
Bitte beachtet, dass ich aus Sicherheitsgründen meinen Code verbessert habe. Durch diesen kleinen Bug entstand folgendes Missverständnis.
Marc. - Mi 19.12.07 18:38
Vielleicht soll er es aber mit einer For-Schleife lösen.
Es soll Lehrer geben, die auf nicht bereits fertige Funktionen stehen - sprich auf Selbst-Geschriebenes, bei dem auch noch der Ablauf erkannbar ist. :)
cu
Marc
Yogu - Mi 19.12.07 18:45
Ich denke nicht, dass das selektieren eines Eintrags in einer Liste das Hauptthema des Projekts ist. Da würd man doch wohl solche Funktionen benutzen dürfen. Man kann natürlich auch das ganze in Assembler schreiben, am besten noch dazu ein OS, auf dem man das Programm zum Laufen bringt. Dann hat man alles selber gemacht :P
Christian S. - Mi 19.12.07 18:49
Die Methode über IndexOf ist nicht das Gleiche wie die Methode über Schleife+Pos. Bei letzterem wird auch ein Eintrag gefunden, der den gesuchten String nur enthält aber nicht identisch ist.
110022 - Do 20.12.07 15:35
---hier stand nichts brauchbares von mir :wink: ---
---diesen eintrag nicht beachten ---
Christian S. - Do 20.12.07 15:43
Zeige mir das Wort "IndexOf" in Deinem Quelltext :roll:
Und beschäftige Dich mal mit Grundlagen!
110022 - Do 20.12.07 15:45
ich meine nur wie das hier richtig geht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var w:string; begin w:=edit1.text; if ListBox1.ItemIndex(w) >= 0 then ListBox1.ItemIndex := ListBox1.ItemIndex(w); end;
FEHLER
[Fehler] Unit1.pas(33): Operator oder Semikolon fehlt [Fehler] Unit1.pas(34): Operator oder Semikolon fehlt |
Christian S. - Do 20.12.07 15:46
Mit listBox1.Items.IndexOf(deinString) den passenden Index suchen. Diesen Index der listBox1.ItemIndex-Eigenschaft zuweisen.
LorenzS - Do 20.12.07 15:54
Zitat: |
dann kommen aber 2 fehler
Delphi-Quelltext 1: 2: 3:
| [Fehler] Unit1.pas(33): Operator oder Semikolon fehlt [Fehler] Unit1.pas(34): Operator oder Semikolon fehlt |
wie is das richtig? |
Es wäre noch praktisch wenn uns zeile 33 und 34 explizit kopierst!
110022 - Do 20.12.07 16:08
zeile 33 =if ListBox1.ItemIndex(w) >= 0 then
zeile 34 =ListBox1.ItemIndex := ListBox1.ItemIndex(w);
die meldungen kennt ihrt ja schon
Marc. - Do 20.12.07 17:04
...
Was ist "w" ? Verwechselst du ItemIndex eventuell mit IndexOf ?
Schau dir doch nun endlich mal die Beschreibung zu diesen Befehlen an!! Markieren + F1.
cu
Marc
LorenzS - Do 20.12.07 17:27
Yogu Verfasst am: Mi 19.12.07 17:37 hat folgendes geschrieben: |
Folgender Code reicht doch vollkommen aus:
Delphi-Quelltext 1: 2:
| if ListBox.ItemIndex(String) >= 0 then ListBox.ItemIndex := ListBox.ItemIndex(String); |
Alle anderen Lösungen sind eigentlich unnötig kompliziert. |
Da hat er es her!
1. Exacte Suche
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button10Click(Sender: TObject); begin if ListBox1.Items.IndexOf(trim(Edit1.text))>=0 then ListBox1.ItemIndex:=ListBox1.Items.IndexOf(trim(Edit1.text)); end; |
2. Ungenaue Suche (im EditFeld reicht schon ein Teil um die Einträge in der ListBox zufinden)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button10Click(Sender: TObject); var i:integer begin for i:=0 to listbox1.items.count-1 do if pos(edit1.Text, listbox1.items[i]) > 0 then listbox1.itemindex:=i; end; |
3. Kombi aus beidem, wenn er das Exacte nicht findet, versucht er es ungenau
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button10Click(Sender: TObject); var i:integer begin if ListBox1.Items.IndexOf(trim(Edit1.text))>=0 then ListBox1.ItemIndex:=ListBox1.Items.IndexOf(trim(Edit1.text)) else for i:=0 to listbox1.items.count-1 do if pos(edit1.Text, listbox1.items[i]) > 0 then listbox1.itemindex:=i; end; |
Yogu - Do 20.12.07 17:37
Yogu am Mi 19.12.07 17:37 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2:
| if ListBox.ItemIndex(String) >= 0 then ListBox.ItemIndex := ListBox.ItemIndex(String); | |
Oh, großes Sorry! Da habe ich wohl etwas durch einander gebracht. :oops: So müsste es eigentlich heißen:
Delphi-Quelltext
1: 2:
| if ListBox.IndexOf(String) >= 0 then ListBox.ItemIndex := ListBox.IndexOf(String); |
:autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch: :autsch:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!