TListBox a TComboBox spoločnosti Delphi zobrazujú zoznam položiek - reťazcov v zozname, ktorý je možné vybrať. TListBox zobrazuje posúvateľný zoznam, TComboBox zobrazuje rozbaľovací zoznam.
Spoločnou vlastnosťou všetkých vyššie uvedených ovládacích prvkov je predmety nehnuteľnosť. Položky definujú zoznam reťazcov, ktoré sa používateľovi zobrazia v ovládacom prvku. V okamihu návrhu, keď dvakrát kliknete na vlastnosť Položky, umožňuje editor položiek zoznamu reťazcov určiť položky reťazca. Vlastnosť Položky je vlastne potomok typu TStrings.
Dva reťazce na položku v zozname?
Existujú situácie, keď chcete zobraziť a zoznam reťazcov pre používateľa, napríklad v ovládacom prvku zoznamu, ale majú tiež spôsob uložiť jeden ďalší reťazec pozdĺž toho, ktorý sa zobrazuje používateľovi.
A čo viac, možno budete chcieť uložiť alebo pripojiť viac ako obyčajný reťazec priložiť objekt k položke (reťazec).
Listbox. Položky - TStrings "Knows" Objects!
Dajte objektu TStrings ešte jeden pohľad v systéme pomoci. Tam sú
objektov Vlastnosť, ktorá predstavuje skupinu objektov, ktoré sú spojené s každým z reťazce vo vlastníctve Strings - kde vlastnosť Strings odkazuje na skutočné reťazce v zozname.Ak chcete každému reťazcu v zozname priradiť druhý reťazec (alebo objekt), musíte vyplniť vlastnosť Položky v čase spustenia.
Aj keď môžete použiť Listbox. Položky. pridať metóda pridať reťazce do zoznamu, na priradenie objektu ku každému reťazcu, budete musieť použiť iný prístup.
Listbox. Položky. AddObject metóda akceptuje dva parametre. Prvý parameter „Položka“ je text položky. Druhý parameter „AObject“ je objekt spojený s položkou.
Upozorňujeme, že v zozname sa nachádza Pridať položku metóda, ktorá robí to isté ako položky. AddObject.
Dva reťazce pre jeden reťazec
Od obidvoch položiek. AddObject a AddItem akceptujú premennú typu TObject pre svoj druhý parameter, riadok ako:
// chyba kompilácie!
ListBox1.Items. AddObject ('zarko', 'gajic');
bude mať za následok chybu kompilácie: E2010 Nekompatibilné typy: „TObject“ a „string“.
Nemôžete jednoducho zadať reťazec pre objekt, pretože hodnoty v reťazci Delphi for Win32 nie sú objekty.
Ak chcete položke druhého zoznamu priradiť druhý reťazec, musíte premeniť reťazcovú premennú na objekt - potrebujete vlastný objekt TString.
Celé číslo pre reťazec
Ak je druhá hodnota, ktorú potrebujete spolu s položkou reťazca uložiť, celočíselná hodnota, v skutočnosti nepotrebujete vlastnú triedu TInteger.
ListBox1.AddItem ('Zarko Gajic', TObject (1973));
V riadku vyššie je celé číslo „1973“ spolu s pridaným reťazcom „Zarko Gajic“.
Priame písanie textu z celého čísla na objekt je uvedené vyššie. Parameter „AObject“ je vlastne 4-bajtový ukazovateľ (adresa) pridaného objektu. Pretože vo Win32 celé číslo zaberá 4 bajty - také tvrdé obsadenie je možné.
Ak sa chcete vrátiť celé číslo spojené s reťazcom, musíte prenášať „objekt“ späť na celé číslo:
// year == 1973
year: = Celé číslo (ListBox1.Items. Objekty [ListBox1.Items. IndexOf („Zarko Gajic“)]);
Delphi ovládanie pre reťazec
Prečo tu zastaviť? Priradenie reťazcov a celých čísel k reťazcu v zozname je, ako ste práve zažili, hračka.
Pretože ovládacie prvky Delphi sú v skutočnosti objekty, môžete priložiť ovládací prvok ku každému reťazcu zobrazenému v zozname.
Nasledujúci kód pridá do zoznamu ListBox1 (zoznam) titulky všetkých ovládacích prvkov TButton vo formulári (umiestnite ich do obsluhy udalosti OnCreate vo formulári) spolu s odkazom na každé tlačidlo.
var idx: celé číslo; začaťpre idx: = 0 na -1 + ComponentCount robiťzačaťak Komponenty [idx] je tna potom ListBox1.AddObject (TButton (komponenty [idx]). Titulok, komponenty [idx]); koniec; koniec;
Ak chcete programovo kliknúť na tlačidlo „druhé“, môžete použiť nasledujúci príkaz:
TButton (ListBox1.Items.. Objekty [1]) Kliknutím;
Chcem priradiť svoje vlastné objekty k položke reťazca
Vo všeobecnejšej situácii by ste pridali inštancie (objekty) svojich vlastných tried:
typ TStudent = triedasúkromné fName: string; fYear: celé číslo; verejnosťnehnuteľnosť Názov: reťazec prečítaný fname; nehnuteľnosť Rok: celé číslo čítať fYear; staviteľ vytvorenie (const názov: povrázok; const rok: celé číslo); koniec;... staviteľ TStudent. vytvorenie (const názov: povrázok; const rok: celé číslo); začať fName: = name; fYear: = rok; koniec; začať// do zoznamu pridajte dva reťazce / objekty -> študenti ListBox1.AddItem ('John', TStudent. Create ('John', 1970)); ListBox1.AddItem ('Jack', TStudent. Create ('Jack', 1982)); // chytiť prvého študenta - Johna student: = ListBox1.Iems. Objekty [0] ako TStudent; // zobrazí Jánov rok ShowMessage (IntToStr (študent. Rok)); koniec;
To, čo vytvoríte, musí byť bezplatné
Tu je vysvetlené, čo má Pomocník hovoriť o objektoch v potomkoch TStrings: objekt TStrings nevlastní objekty, ktoré pridáte týmto spôsobom. Objekty pridané do objektu TStrings stále existujú, aj keď je inštancia TStrings zničená. Musia byť výslovne zničené aplikáciou.
Keď pridávate objekty do reťazcov - objektov, ktoré vytvárate - musíte sa uistiť, že máte voľné miesto v pamäti, inak budete mať únik pamäte
Všeobecný vlastný postup FreeObjects akceptuje premennú typu TStrings ako svoj jediný parameter. FreeObjects uvoľní všetky objekty spojené s položkou v zozname reťazcov. Vo vyššie uvedenom príklade sú študenti (trieda TStudent) pripojení k reťazec v zozname, keď sa má aplikácia zatvoriť (napríklad hlavná udalosť OnDestroy), musíte uvoľniť pamäť obsadené:
FreeObjects (ListBox1.Items);
Poznámka: Túto procedúru voláte iba vtedy, keď ste vytvorili objekty priradené k položkám reťazcov.