A Delphi TListBox és TComboBox megjeleníti az elemek listáját - karakterláncokat "választható" listában. A TListBox megjelenít egy görgethető listát, a TComboBox pedig egy legördülő listát.
A fenti vezérlők közös tulajdonsága a példány ingatlan. Az elemek meghatározják a karakterláncok listáját, amelyek megjelennek a vezérlőben a felhasználó számára. Tervezéskor, amikor duplán kattint a Tételek tulajdonságra, a "String List Editor" lehetővé teszi karakterláncok megadását. Az Elemek tulajdonság valójában egy TStrings típusú leszármazott.
Két húr elemenként egy Listadobozban?
Vannak olyan helyzetek, amikor meg szeretné jeleníteni a húrok listája a felhasználó számára, például a listamező vezérlőjén, de meg is találhat módot arra tároljon egy további karakterláncot a felhasználó számára megjelenített mentén.
Sőt, érdemes nem csupán egy "egyszerű" karakterláncot tárolni / csatolni a karakterlánchoz, amelyet esetleg érdemes megtenni objektum csatolása az elemhez (karakterlánc).
ListBox. Tételek - TStrings "ismeri" tárgyakat!
Adjon még egy pillantást a TStrings objektumra a Súgó rendszerben. Ott van a tárgyak tulajdonság, amely az egyes objektumokhoz társított objektumok halmazát képviseli húrok a Karakterláncok tulajdonságban - ahol a karakterláncok tulajdonság hivatkozik a listában szereplő tényleges karakterláncokra.
Ha egy második karakterláncot (vagy egy objektumot) szeretne hozzárendelni a listamező minden karakterlánjához, akkor ki kell töltenie a Tételek tulajdonságot futási időben.
Amíg használhatja a ListBox. Terméket. hozzáad módszer a karakterláncok hozzáadására a listához, az objektumok egyesítéséhez minden karakterlánccal egy másik megközelítést kell használnia.
Az ListBox. Terméket. AddObject A módszer két paramétert fogad el. Az első paraméter, az "elem" az elem szövege. A második paraméter, az "AObject" az elemhez társított objektum.
Vegye figyelembe, hogy a listamező kiteszi a AddItem módszer, amely ugyanaz, mint a tételek. AddObject.
Két húr egy húrra
Mivel mindkét tétel. Az AddObject és az AddItem elfogadja a TObject típusú változót a második paraméterükhöz, például:
// fordítási hiba!
ListBox1.Items. AddObject ('zarko', 'gajic');
fordítási hibát eredményez: E2010 Nem összeférhető típusok: 'TObject' és 'string'.
Nem egyszerűen megadhat egy karakterláncot az objektum számára, mivel a Delphi for Win32 karakterlánc értékei nem objektumok.
Egy második karakterlánc hozzárendeléséhez a listamező eleméhez egy karakterláncváltozót "objektummá" kell alakítania - szükség van egy egyéni TString objektumra.
Karakterlánc egész szám
Ha a karakterlánc elemmel együtt tárolni kívánt második érték egész szám, akkor valójában nincs szüksége egyéni TInteger osztályra.
ListBox1.AddItem ('Zarko Gajic', TObject (1973));
A fenti sor az "1973" egész számot, a hozzáadott "Zarko Gajic" karakterlánccal együtt tárolja.
Egy közvetlen számot egy egészből egy objektumhoz készítünk fent. Az "AObject" paraméter valójában a hozzáadott objektum 4 bájtos mutatója (címe). Mivel a Win32-ben egy egész szám 4 bájtot foglal el - ilyen kemény leadás lehetséges.
A húrhoz társított egész szám visszaszerzéséhez vissza kell adnia az "objektumot" az egész értékre:
// év == 1973
év: = egész szám (ListBox1.Items. Tárgyak [ListBox1.Items. IndexOf ('Zarko Gajic')]);
Delphi vezérlő egy karakterlánchoz
Miért áll meg itt? Karakterláncok és egész számok hozzárendelése egy karakterlánchoz a listában, amint azt éppúgy tapasztalta, egy darab sütemény.
Mivel a Delphi vezérlők valójában objektumok, hozzákapcsolhat egy vezérlőt a listában megjelenő minden karakterlánchoz.
A következő kód hozzáadja az űrlapon lévő TButton vezérlőelemek listájához a ListBox1 (list box) feliratait (helyezze el az űrlap OnCreate eseménykezelőjébe), az egyes gombokra való hivatkozással együtt.
var idx: egész szám; kezdődikmert idx: = 0 nak nek -1 + ComponentCount csinálkezdődikha Components [IDX] jelentése TButton azután ListBox1.AddObject (TButton (Components [idx]). Caption, Components [idx]); vég; vég;
A "második" gomb programozási "kattintására" a következő állítás használható:
TB gomb (ListBox1.Items. Objektumok [1]). Click;
Szeretném hozzárendelni az egyéni objektumaimat a karakterlánc elemhez
Általánosabb helyzetben hozzáadhat saját egyedi osztályainak példányait (objektumait):
típus TStudent = osztálymagán fName: string; év: egész szám; nyilvánosingatlan Név: húr olvasni fNAME; ingatlan Év: egész szám olvas fYear; konstruktőr létrehozása (const név: húr; const év: egész); vég;... konstruktőr TStudent. létrehozása (const név: húr; const év: egész); kezdődik fName: = név; fév: = év; vég; kezdődik// adjon hozzá két karakterláncot / objektumot -> diákot a listához ListBox1.AddItem ('John', TStudent. Create ('John', 1970)); ListBox1.AddItem ('Jack', TStudent. Create ('Jack', 1982)); // megragad az első hallgató - John hallgató: = ListBox1.Items. Objektumok [0] mint TStudent; // János évének megjelenítése ShowMessage (IntToStr (hallgató. Év)); vég;
Amit készít, meg kell szabadítania
A súgóban ezt mondhatjuk a TStrings leszármazottaiban lévő objektumokról: A TStrings objektum nem rendelkezik az ilyen módon hozzáadott objektumokkal. A TStrings objektumhoz hozzáadott objektumok még akkor is léteznek, ha a TStrings példány megsemmisül. Nekik kell lenniük kifejezetten megsemmisült az alkalmazás által.
Ha objektumokat ad hozzá karakterláncokathoz - a létrehozott objektumokhoz -, győződjön meg arról, hogy felszabadította a foglalt memóriát memória szivárgás
A FreeObjects általánosan alkalmazott egyedi eljárás a TStrings típusú változókat fogadja el egyetlen paraméterként. A FreeObjects felszabadít minden olyan objektumot, amely a húrlista elemeivel társul. A fenti példában a "diákok" (TStudent osztály) csatolva vannak a egy karakterlánc egy listamezőben, amikor az alkalmazás bezáródik (például OnDestroy fő formátum esemény), fel kell szabadítania a memóriát megszállt:
FreeObjects (ListBox1.Items);
Megjegyzés: Ezt az eljárást csak akkor hívja meg, ha a karakterlánc elemekhez rendelt objektumokat Ön készítette.