![]() |
Delphi-Version: 5
TLisstBox mit anderer Value
Hallo,
eine TListBox zu befülle ist ja kein Akt. Aber ich brauche zwar einen Sinnigen Text aber dahinter soll ein bestimmter String stehen so wie es auch bei dem HTML Select ist. Option Value und Text Wie mache ich dies mit Delphi?? |
AW: TLisstBox mit anderer Value
Wenn man in 'ner ListBox 'nen Eintrag auswählt, erhält man ja seinen ItemIndex.
Geht man nun her und befüllt die Items mit "sinnvollem Text" kann man in der gleichen Reihenfolge eine Stringliste (oder adäquates) mit "bestimmtem String" befüllen. Wird nun in der ListBox ein Eintrag ausgewählt, nimmt man seinen ItemIndex und holt damit den entsprechenden Eintrag aus der Stringliste. Man könnte auch hergehen und 'nen Nachfahren von TListBox mit 'ner zweiten Itemeigenschaft (Values) machen, dann kann man die entsprechenden Lese- und Schreibmethoden darin kapseln ... |
AW: TLisstBox mit anderer Value
Denkbar wäre auch eine eigene kleine Klasse mit 2 String-Feldern, deren Instanzen man in einer TObjectList verwaltet. Über diese Liste iteriert man und fügt jede Instanz der ListBox hinzu. Im OnCick oder sonstwo kann man dann auf die gespeicherte Referenz zugreifen und den dahinterliegenden Wert abfragen. Kleines Beispiel (ohne Generics, da Delphi 5 angegeben), zuerst die simple Klasse:
Delphi-Quellcode:
Und jetzt das Formular mit der ListBox:
type
TWuppdi = class public // Ich habe hier bewusst auf Properties verzichtet DisplayString: string; IDString: string; constructor Create(const ADisplay, AID: string); end; ... { TWuppdi } constructor TWuppdi.Create(const ADisplay, AID: string); begin inherited Create; DisplayString := ADisplay; IDString := AID; end;
Delphi-Quellcode:
type
TfrmDemo = class(TForm) lbWuppdis: TListBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure lbWuppdisClick(Sender: TObject); private { Private-Deklarationen } FWuppdis: TObjectList; // aus Contnrs procedure CreateWuppdis; procedure DisplayWuppdis; public { Public-Deklarationen } end; ... procedure TfrmDemo.CreateWuppdis; var i: integer; begin FWuppdis.Clear; for i := 1 to 10 do FWuppdis.Add(TWuppdi.Create(Format('Display %d', [i]), Format('ID %d', [i]))); end; procedure TfrmDemo.DisplayWuppdis; var i: integer; lWuppdi: TWuppdi; begin lbWuppdis.Items.BeginUpdate; try lbWuppdis.Clear; for i := 0 to FWuppdis.Count - 1 do begin lWuppdi := FWuppdis[i] as TWuppdi; lbWuppdis.Items.AddObject(lWuppdi.DisplayString, lWuppdi); end; finally lbWuppdis.Items.EndUpdate; end; end; procedure TfrmDemo.FormCreate(Sender: TObject); begin FWuppdis := TObjectList.Create; CreateWuppdis; DisplayWuppdis; end; procedure TfrmDemo.FormDestroy(Sender: TObject); begin FWuppdis.Free; end; procedure TfrmDemo.lbWuppdisClick(Sender: TObject); var lWuppdi: TWuppdi; begin if lbWuppdis.ItemIndex > -1 then begin lWuppdi := lbWuppdis.Items.Objects[lbWuppdis.ItemIndex] as TWuppdi; ShowMessage(lWuppdi.IDString); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 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