![]() |
In einer ListBox einen Eintrag suchen bzw. Eintrag ändern
Hallo,
wir haben ein riesiges Problem, d. h. wir sollen in der Schule ein Televonverzeichnis erstellen, mit diversen Funktionen, uns fehlen nun noch zwei, speziell das Suchen eines Eintrages in der Listbox, dies sollte so sein, das nach Eingabe des Suchbegriffs in einem Editfeld dieser mit der Listbox verglichen wird und anschließend, bei gefunden, in der Listbox markiert wird und das Ändern eines bereits vorhandenen Eintrages, ähnlich wie oben, d.h. nur hier soll ein Eintrag in der Listbox vom Benutzer markieret werden, welcher dann in einem Editfeld ausgegeben wird um diesen zu ändern, anschließend wieder abgespeichert und in die Listbox zurück..... Wir sind Delphi-bezogen sehr unbefleckt, sitzen nun schon mehrere Wochen, Tage an dem Projekt und haben diverse Bücher gelesen, jedoch ohne Erfolg. Wenn es irgendjemanden da draußen gibt der uns diesbezüglich helfen kann BITTE BITTE BITTE meldet euch.... mfg jeany06 Ps: Alles in Delphi6 Enterprise zu programmieren. Besondere Probleme sind die ständigen Fehlermeldungen, das String und Integer nicht miteinander funktionieren. |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Hallo, herzlich willkommen!
Suchen kannst du einen Eintrag über ![]()
Delphi-Quellcode:
Einen Eintrag bekommst du do ein ein Edit:
Index := ListBox.IndexOf('Suchwort');
Delphi-Quellcode:
Und das Zurückschreiben geht dementsprechend so:
Edit.Text := ListBox.Items[ListBox.ItemIndex];
Delphi-Quellcode:
ListBox.Items[ListBox.ItemIndex] := Edit.Text;
Alles ungetestet. |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Hallo Matze,
sehr nett von dir, dass du so schnell geantwortet hast. Jedoch, wie haben wir das mit IndexOf zu verstehen? Uns fehlen jegliche Grundkenntnisse, wir wurden in das kalte Wasser geschmissen und sollen nun lernen zu überleben... |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Noch eine weitere Frage: Die Suchworteingabe erfolgt in einem Editfeld vom Benutzer, die Listbox wird per Schleife durchlaufen, können doch dann schlecht ('Suchwort') eingeben, es müsste doch eigentlich das Editfeld angesprochen werden, sprich ein Vergleich (Eingabe Editfeld und ListBox) stattfinden????
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Desweiteren kannst du dir genauere Informationen dazu auch aus der ![]() //Edit: :shock: Huch, wo kommt das denn her? :lol: Zitat:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Also, das ist so:
![]() Natürlich sollst du das nicht hardcoden, sondern beispielsweise so lösen:
Delphi-Quellcode:
Wenn sich das Suchwort in einem Edit befindet.
MyIndex := ListBox.IndexOf(Edit.Text);
Du kannst den Eintrag auch direkt markieren lassen:
Delphi-Quellcode:
ListBox1.ItemIndex := ListBox.IndexOf(Edit.Text);
Ich würde dir empfehlen, ein paar Einsteigertutorials auf ![]() |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Hallo leddl, danke für die Erläuterung. Klappt aber trotzdem nicht, IndexOf wird nicht erkannt (Undefinierter Bezeichner). Sorry, dass wir uns so blöd :wall: anstellen ist halt nicht einfach für uns....
Hallo Matze, danke dir ebenso. Werden den Link berücksichtigen... klappt aber wie gesagt nicht... |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Hi, sorry, hatte mich vertan. Es muss
Delphi-Quellcode:
lauten, steht aber alles in der OH.
ListBox.Items.IndexOf
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Echt lieb von dir, was ist OH?
|
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Projekte" nach "VCL / WinForms / Controls" verschoben.
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Delphi-Quellcode:
bzw.
IntToStr(integervar)
Delphi-Quellcode:
[quote]
StrToInt(stringvar)
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Einfach toll, dann können wir ja doch die Schleife benutzen, werden es gleich probieren. Lieben Dank.
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Also, wir haben alle Ratschläge berücksichtigt. Dennoch funktioniert die Suchfunktion nicht. Alle Rechner hängen sich auf... könntet ihr uns einen Muster des vollständigen Codes schreiben/schicken? Wohnt jemand in Berlin, den man besuchen kann???? Verzweifeln.... :wall:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
:gruebel: Wozu willst du eine Schleife benutzen? Du hast dein EditFeld mit dem zu suchenden Begriff und du hast die ListBox.
Mit IndexOf kannst du jetzt den Index des Suchbegriffs in der ListBox herausfinden. (-1 für "nicht gefunden", 0 für das erste Element, 1 für das zweite...) Da is nix mit Schleife, sondern einfach nur die eine Zeile, die jetzt schon mehrmals gepostet wurde. ;) |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Hey, tut uns echt leid, dass wir das nicht hinbekommen, die -1 wurde uns mit dem Aufhängen des Programms gezeigt, mit dem Verweis, das irgendwas noch viel größer ist, schicke dir jetzt was wir haben. Zumindest stürzt er jetzt nicht mehr ab. Markiert aber auch nicht den SUchbegriffe.
Delphi-Quellcode:
Und wir dachten die Schleife, weil die Listbox durchsucht werden soll nach dem Begriff.
procedure TForm1.Button9SucheClick(Sender: TObject);
var i:integer; begin FOR i := 0 TO ListBoxText.Items.Count - 1 DO if ListBoxText.ItemIndex = ListBoxText.Items.IndexOf(Edit9Suche.Text) then ListBoxText.Color:=TColor(3); end; Wir haben auch nur nicht wirklich viel über Delphi gelernt, deshalb nochmals dickes SORRY für all die dummen Fragen. lg |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Delphi-Quellcode:
Dein Code macht so einfach keinen rechten Sinn. Ich hoffe, ich habe es aber trotzdem richtig interpretiert.
if ListBoxText.Items.IndexOf(Edit9Suche.Text) > -1 then
ListBoxText.Color := TColor(3); //Edit: Ich sehe gerade, du willst das gefundene Item markieren.
Delphi-Quellcode:
ListBoxText.ItemIndex := ListBoxText.Items.IndexOf(Edit9Suche.Text);
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Die If-Anweisung wurde geändert, dein Markierungsvorschlag übernommen und es regt sich nach der Eingabe des Suchbegriffs, z.B. Wollke, nichts. Was für ein kompliziertes Programm. Danke für deine Geduld. lg jeany
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Du sagtest, daß "sich nach der Eingabe nichts regt". Du hast aber schon auf den Button gedrückt, oder? ;) Und der String, den du in das Editfeld eingegeben hast, ist auch definitiv in der ListBox enthalten? |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
ja, die Schleife wurde entfernt. Das Wort ist in der Liste, die zweite Anweisung genommen und der Button wurde auch gedrückt. Und dennoch nichts.Schicke es lieber nochmal:
Delphi-Quellcode:
mmhh?
procedure TForm1.Button9SucheClick(Sender: TObject);
begin if ListBoxText.Items.IndexOf(Edit9Suche.Text) > -1 then ListBoxText.ItemIndex := ListBoxText.Items.IndexOf(Edit9Suche.Text); end; |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Muss vielleicht etwas in der Eigenschaft der Listbox geändert werden im Objektinspektor?
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Ich hab es eben gerade auch mal getestet. In D2k5 tut es genau das, was ich davon erwartet habe: Ein Klick auf den Button markiert das entsprechende Element in der ListBox. Dabei mußte ich sogar erstaunt feststellen, daß IndexOf wohl alles andere als CaseSensitive arbeitet. ;)
Hier nochmal mein Code (Direkt aus der funktionierenden Anwendung kopiert ;))
Delphi-Quellcode:
//Edit:
procedure TForm1.Button1Click(Sender: TObject);
begin ListBox1.ItemIndex := ListBox1.Items.IndexOf(Edit1.Text); end; Huch, schon wieder is da plötzlich was da :lol: Auch deinen Code habe ich eben auf die Schnelle mal getestet. Auch das funktioniert, obwohl die 1. Zeile unnötig ist. ;) Du mußt an der ListBox nichts ändern, damit es funktioniert. Es muß einfach nur das entsprechende Item vorhanden sein. ;) |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Schlechte Nachrichten, übernommen und es bewegt sich immer noch nichts. Erste Zeile entfernt, die Items existieren auch, puh.... :spin:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Stell deinen Projekt mal hier rein, dann schau ichs mir mal an.
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Aber nicht lachen:
Delphi-Quellcode:
unit Unit1;
interface uses SysUtils, WinTypes,WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Edit1Name: TEdit; Edit2Vorname: TEdit; Edit3Geburtsdatum: TEdit; Edit4Strasse: TEdit; Edit5Ort: TEdit; Edit6Telefonnummer: TEdit; Edit7Firma: TEdit; Edit8Anzahl: TEdit; Edit9Suche: TEdit; ListBoxText: TListBox; Button1Laden: TButton; Button2Hinzufuegen: TButton; Button3Aendern: TButton; Button4Loeschen: TButton; Button5AllesLoeschen: TButton; Button6Sortieren: TButton; Button7Zaehlen: TButton; Button8Speichern: TButton; Button9Suche: TButton; Button10Schlie: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Edit10Aendern: TEdit; Label13: TLabel; Label14: TLabel; procedure ListBoxTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button2HinzufuegenClick(Sender: TObject); procedure Button10SchlieClick(Sender: TObject); procedure Button5AllesLoeschenClick(Sender: TObject); procedure Button7ZaehlenClick(Sender: TObject); procedure Button4LoeschenClick(Sender: TObject); procedure Button8SpeichernClick(Sender: TObject); procedure Button1LadenClick(Sender: TObject); procedure Button6SortierenClick(Sender: TObject); { procedure Button3AendernClick(Sender: TObject); } procedure Button9SucheClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ListBoxTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Button4Loeschen.Enabled:=ListBoxText.ItemIndex>=0; end; procedure TForm1.Button2HinzufuegenClick(Sender: TObject); begin ListBoxText.Items.Add(Edit1Name.text +','+Edit2Vorname.text +' geb.:'+ Edit3Geburtsdatum.text + ' '+Edit4Strasse.text +' '+Edit5Ort.text + ' Tel.:'+Edit6Telefonnummer.text +' '+Edit7Firma.text); Edit1Name.text:=''; Edit2Vorname.text:=''; Edit3Geburtsdatum.text:=''; Edit4Strasse.text:=''; Edit5Ort.text:=''; Edit6Telefonnummer.text:=''; Edit7Firma.text:=''; Button4Loeschen.Enabled:=TRUE; end; procedure TForm1.Button10SchlieClick(Sender: TObject); begin close; end; procedure TForm1.Button5AllesLoeschenClick(Sender: TObject); begin ListBoxText.Items.Clear; Button4Loeschen.Enabled:=TRUE; Button5AllesLoeschen.Enabled:=TRUE; end; procedure TForm1.Button7ZaehlenClick(Sender: TObject); var anzahl:integer; begin anzahl:=ListBoxText.Items.Count; Edit8Anzahl.Text:=IntToStr(anzahl); end; procedure TForm1.Button4LoeschenClick(Sender: TObject); begin if ListBoxText.ItemIndex>-1 then ListBoxText.Items.Delete(ListBoxText.ItemIndex); Button4Loeschen.Enabled:=TRUE; Button5AllesLoeschen.Enabled:=ListBoxText.Items.Count>=1; end; procedure TForm1.Button8SpeichernClick(Sender: TObject); begin ListBoxText.Items.SaveToFile('Telefon.dat'); end; procedure TForm1.Button1LadenClick(Sender: TObject); begin ListBoxText.Items.LoadFromFile('Telefon.dat'); end; procedure TForm1.Button6SortierenClick(Sender: TObject); begin ListBoxText.Sorted:=TRUE; end; {procedure TForm1.Button3AendernClick(Sender: TObject); var i: integer; begin FOR i := 0 TO ListBoxText.Items.Count - 1 DO IF ListBoxText.Items[i] >-1 THEN if StrToInt(Edit2.Text) = ListBox1.Items[i] THEN ListBox1.Items[i] := 0; Edit10Aendern.Text:=(i); ListBoxText.Items.Add(Edit10Aendern.text); Edit10Aendern.Text:=''; end; } procedure TForm1.Button9SucheClick(Sender: TObject); begin ListBoxText.ItemIndex := ListBoxText.Items.IndexOf(Edit9Suche.Text); end; end. |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Machs mir mal einfacher und füge dein gesamtes Projekt als Anhang (am besten als zip) hier im Forum ein. Dann kann ichs einfach mal bei mir compilieren und testen. ;) Bin grade zu faul, mir aus dem allen hier ein Projekt zu erstellen ;)
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Du bist wirklich lustig, hier am anderen Ende sitzt eine Frau, welche keinerlei Ahnung hat. Muss mir kurz Hilfe holen, bis gleich. Bekommst die Zip :wink:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zip - Datei habe ich. Hast du vielleicht eine Mail-Adresse, bekomme dies irgendwie nicht als Anhang hin.
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Soeben raus...
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Delphi-Quellcode:
Das kann schonmal gar nicht funktionieren, da [i]Items einen String und keinen Integer erwartet. ;) Das darüber mit dem Vergleich auf -1 ebenfalls (wenn, dann müsste es if ListBoxText.ItemIndex > -1 then heißen), das geht so nicht.
if StrToInt(Edit2.Text) = ListBox1.Items[i] THEN ListBox1.Items[i] := 0;
Ich würde es so in der Art schreiben, falls der Code dazu dient, alle Einträge zu ändern, die den gleichen Inhalt wie Edit2 haben:
Delphi-Quellcode:
Das macht nun folgendes, kA, ob du das so möchtest, verstehe es nicht ganz :lol:
for i := 0 to ListBoxText.Items.Count - 1 do
if ListBox1.Items[i] = Edit2.text then ListBoxText.Items[i] := Edit10Aendern.Text In der ListBox werden die Einträge gesucht, die dem Inhalt von Edit2 entsprechen und diese werden ersetzt durch den Inhalt von Edit10Ändern. Falls du das nicht so haben wolltest, schreibe doch bitte nochmals, was genau du erreichen willst. :zwinker: |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Habs bekommen und auch sofort deinen Denkfehler gefunden. Du speicherst in der ListBox nicht nur einen bestimmten String, den du suchen möchtest, sondern setzt jedes Item aus diversen Strings zusammen. Das hättest ruhig mal etwas früher sagen können. :zwinker:
Denn damit geht das dann nicht mehr so einfach mit IndexOf, da so jedes Item als ganzes überprüft wird. Du mußt daher doch wieder mit einer Schleife durch die ListBox marschieren und prüfen, ob dein Suchstring in dem Item enthalten ist. Das machst du am einfachsten über Pos. Das arbeitet ähnlich wie IndexOf und gibt dir die Position deines Suchstrings im zu durchsuchenden String zurück. Wird nichts gefunden, erhältst du 0 als Ergebnis. Deine Suchroutine könnte also so aussehen:
Delphi-Quellcode:
//Edit: Tag korrigiert
procedure TForm1.Button9SucheClick(Sender: TObject);
var i, subStrPos : Integer; begin i := 0; subStrPos := 0; while (i < ListBoxText.Items.Count) and (subStrPos = 0) do begin subStrPos := Pos(Edit9Suche.Text,ListBoxText.Items[i]); if suBstrPos > 0 then ListBoxText.ItemIndex := i; inc(i); end; end; |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Was soll ich sagen,sprachlos!!!! Das 'Könnte' heißt es ist so umzusetzen und dann funktioniert der Button. Probiere es. D A N K E
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Wenn du dir in dieser Methode am Schluß noch den aktuellen Index speicherst, könntest du sogar so recht einfach ein "Weiter suchen" realisieren ;) |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Bei mir funktioniert es nicht... seuft. Muss noch etwas wichtiges beachtet werden? :cry:
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Moment, ich hab es bisher nur in meinem Code getestet. Ich setz das mal in dein Projekt ein und debugge ;)
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Fehler gefunden und enttarnt :mrgreen:
Meine Methode funktioniert. Problem ist nur, daß du für deine ListBox MultiSelect aktiviert hast. Damit scheint dann das Setzen des ItemIndex nicht mehr zu funktionieren. Ist mir neu, scheint aber so zu sein. (Genau für solche Kleinigkeiten wollte ich übrigens das gesamte Projekt, das erkennt man aus Quelltext nämlich eher schlecht :lol:) Stattdessen mußt du dann um ein Item zu markieren
Delphi-Quellcode:
schreiben.
ListBoxText.Selected[i] := true;
Allerdings werden dabei bereits vorhandene Markierungen nicht gelöscht. Daher solltest du davor noch
Delphi-Quellcode:
ausführen.
ListBoxText.ClearSelection;
Brauchst du MultiSelect überhaupt? Falls nicht, könntest du auch meinen vorherigen Code benutzen. Generell würde ich dir aber raten, dir in Bezug auf dein Programm mal die ListView (mit ViewStyle vsReport) anzuschauen. Das könnte evtl besser für deine Bedürfnisse sein. |
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
ich rolle mich gerade vor Freude auf den Boden hin und her.... es klappt. Ich nehme lieber deine Version. Und ich weiß überhaupt nicht, wie ich dir danken kann. Wo liegt eigentlich Künzelsau? Weit weg? :thumb: Einfach Toll!!!!!!!!!!
|
Re: In einer ListBox einen Eintrag suchen bzw. Eintrag änder
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz