Thema: Delphi ListBox Wert zuweisen

Einzelnen Beitrag anzeigen

rudi_

Registriert seit: 10. Okt 2004
Ort: Neuss
34 Beiträge
 
Delphi 7 Professional
 
#6

Re: ListBox Wert zuweisen

  Alt 1. Nov 2004, 17:09
hi

wie muetze1 schon gesagt hat, ich würde auf den Objects array zurückgreifen

hier mal ein kleines beispiel:


du deklarierst dir ein Objekt:

Delphi-Quellcode:
type
  TInfoObj = class(TObject)
  private
    FNachname: string;
  published
    property Nachname: string
      read FNachname write FNachname;
end;
wenn du jetzt deine Namen eintragen willst, ginge das z.b. folgendermaßen:

Delphi-Quellcode:
procedure eingabe(Vorname,Nachname: string)
var
  Eintrag: TInfoObj;
begin
  Eintrag := TInfoObj.Create;
  Eintrag.Nachname := Nachname;
  ListBox1.Items.AddObject(Vorname,Eintrag);
end;
damit erhälst du jeweils einen Eintrag in der Listbox mit dem Vornamen und gleichzeitig wurde da noch das Objekt vom typ TInfoObj mitgespeichert, das wiederrum den Nachnamen enthält (natürlich können dann auch genauso anderen Sachen gespeichert werden)


eine schleife zum ausgeben der Vor-/Nachnamen könnte z.B. so aussehen:

Delphi-Quellcode:
procedure ausgabe;
var
  Eintrag: TInfoObj;
  i: integer;
begin
  for i := 0 to ListBox1.Count -1 do
  begin
    Eintrag := ListBox1.Items.Objects[i];
    showmessage('Vorname: '+ListBox1.Items.Strings[i]+' Nachname: '+Eintrag.Nachname);
  end;
end;
diese prozedur liest in einer Schleife alle einträge aus und gibt jeweils den Vornamen wie gehabt aus der ListBox aus und holt sich zusätzlich noch das mit-eingetragene Objekt vom typ TInfoObj und liest die .Nachname property daraus aus. Man sollte natürlich noch als Sicherheit später noch überprüfen, ob Eintrag <> nil ist, aber es geht ja erstmal nur ums prinzip.

Ausserdem: wenn du ListBox1.Clear aufrufst werden zwar alle Einträge gelöscht und auch die Verweise auf die Objekte; diese bleiben allerdings im Speicher.

also müsste man zum leeren der Liste eher sowas hier verwenden:

Delphi-Quellcode:
procedure ClearList;
var
  i: integer;
begin
  for i := 0 to ListBox1.Count - 1 do
  begin
    TInfoObj(ListBox1.Items.Objects[i]).Free;
  end;
  ListBox1.Items.Clear;
end;
damit werden erst alle Objekte sauber aus dem speicher entfernt, bevor auch die Verweise darauf entfernt werden
Wie Sie sehn,
sehn Sie nichts.
  Mit Zitat antworten Zitat