Einzelnen Beitrag anzeigen

Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Per Klick auf Listboxeintrag bestimmten Datensatz ausles

  Alt 21. Dez 2005, 00:07
du kannst einer Listbox anstatt mit "Add" per "AddObject" einen zweiten Paramter übergeben, der versteckt mitgeführt wird. Du kannst darin einen Integerwert bzw. Pointer speichern.
Normalerweise kannst du damit den Zeiger auf ein Objekt abspeichern, deshalb der name "AddObject"

Du solltest versuchen, jedem deiner Datensätze eine eindeutige Nummer zuzuweisen, eine ID also.
Dies ist sozusagen Pflicht, wenn man vorhat, ein wenig mehr mit solchen Datensätzen zu jonglieren und ist auch bei "richtigen" Datenbank-Realisationen normal.

Wenn jeder Datensatz eine eindeutige ID hat, ist es somit egal, wie viele "Klaus" etc. es gibt, denn nach einem Klick auf die Liste wird nicht nach dem Namen (z.B "Klaus") gesucht, sondern es wird die in der Liste mitgespeicherte ID geholt und der entsprechende Datensatz gesucht.
Dies geschieht wie gesagt, indem du vorher die List mit "AddObject" füllst.


Also etwa so:

Listbox1.Items.AddObject('Klaus', TObject(1)); Die "1" soll in diesem Fall einfach die ID des Datensatzes darstellen. Jeder Datensatz muss natürlich seine eigene Nummer haben, die du auch mit in der Datei speichern solltest.
Da der Compiler normalerweise einen Pointer auf ein Objekt erwartet, gaukeln wir ihm mit "TObject()" vor, es sei an dieser Stelle eins.

Um die Daten (die ID) nach einem Klick auszulesen, kannst du folgendes machen:

Delphi-Quellcode:
var ID : integer;
// ...
ID:= Integer(ListBox1.Items.Objects[Listbox1.itemindex]);
Wir sagen dem Compiler, dass er den Pointer als Integer-Wert interpretieren soll (da er ja normalerweise dort einen Pointer auf ein Objekt erwartet). Über die "Objects[]"-Methode lesen wird also die Adresse aus, wo wir ja vorher die ID abgespeichert hatten.


So, ich hoffe es soweit richtig erklärt zu haben, da ich es selbst erst vor kurzem hier gelernt habe...


Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat