![]() |
Sortierte TListbox - Probleme mit ItemIndex
Hallo
Ich befülle eine Listbox mit den Daten aus einem Array und möchte anschließend auf Doppelklicks in der Listbox reagieren. Solange ich die Daten nicht vcn der Listbox sortieren lasse ist alles wunderbar weil der gelieferte Wert Itemindex dem Speicherplatz in meinem Array entspricht. EXTREM verkürztes Beispiel:
Delphi-Quellcode:
Und sobald ein Doppelklick kommt in der Listbox soll die Mailadresse rauskommen. (wieder nur als kurzes Beispiel)
type friends = record
firstname: string[30]; lastname : string[30]; email : string[50]; end; var friendlist : array[1..100] of friends; for i := 1 to 10 do begin form1.ListBox1.Items.Add(friendlist[i].firstname+' '+friendlist[i].lastname) end;
Delphi-Quellcode:
Wenn ich jetzt aber die Listbox sortieren lasse kommt beim Klick auf den ersten Eintrag der Itemindex 0 obwohl der Speicherplatz in meinem Array z.b. 8 sein könnte. Somit wird mir bei dem obigen Beispiel dann eine falsche Mailadresse angezeigt. Wie bekomme ich diese Daten denn wieder überein OHNE vorab zu sortieren ??
procedure TForm1.ListboxdBlClick(Sender: TObject);
begin if listbox1.ItemIndex <> -1 then showmessage(friendlist[listbox1.ItemIndex+1].email); // +1 weil itemindex bei 0 anfängt - meine Liste aber mit 1 end; Ich hoffe ich konnte mein Problem deutlich machen obwohl ich nur beispielhafte Code verwendet habe. |
Re: Sortierte TListbox - Probleme mit ItemIndex
Du kannst die Records auch in den Items ablegen
|
Re: Sortierte TListbox - Probleme mit ItemIndex
Danke schonmal für die Antwort....
... mit der ich leider nicht so richtig was anfangen kann. :thumb: |
Re: Sortierte TListbox - Probleme mit ItemIndex
Delphi-Quellcode:
form1.ListBox1.Items.AddItem(friendlist[i].firstname+' '+friendlist[i].lastname, friendlist[i]);
|
Re: Sortierte TListbox - Probleme mit ItemIndex
Delphi-Quellcode:
.... gibt es bei mir gar nicht.
ListBox1.Items.AddItem(.....
Aber abgesehen davon : Mein eigentlicher Code beinhaltet deutlich mehr Informationen als nur die 3 Sachen hier. Wenn ich das ALLES mit in die Listbox nehme : verschwende ich dann nicht unnötig Speicher ? Mit geht es ja mehr darum wie ich den Rückbezug vom Itemindex zu meinem Speicherplatz im Array herstellen kann. |
Re: Sortierte TListbox - Probleme mit ItemIndex
Zitat:
Delphi-Quellcode:
Du kannst den Items auch nur den Array-Index zuordnen, dann braucht dein Programm nicht so viel Speicher. Natürlich könntest du auch das Array selbst sortieren und dann der ListBox zuweisen.
ListBox1.AddItem(...);
|
Re: Sortierte TListbox - Probleme mit ItemIndex
Meine Empfehlung: mach aus dem record eine Klasse.
Die Objekte diese Klasse speicherst du nicht in einem Array, sondern in einer TObjectList. TObjectList ist eine deutlich bessere Datenstruktur als ein offenes Array. Du kannst nun Einträge über listbox.Items.AddObject() deiner Listbox hinzufügen. Du brauchst dir so auch keine Sorgen zu machen, auf diese Art irgendein Speicher zu verschwenden. Es werden ja nur Zeiger auf die Objekte verwendet. Wenn die Listbox sortiert wird, werden die Zeiger in listbox.Items.Objects[] gleich mitsortiert. |
Re: Sortierte TListbox - Probleme mit ItemIndex
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 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 by Thomas Breitkreuz