Delphijevi TListBox i TComboBox prikazuju popis stavki - žica na popisu koji se može odabrati. TListBox prikazuje popis koji se može pomicati, TComboBox prikazuje padajući popis.
Zajedničko svojstvo svih gore navedenih kontrola je stavke nekretnine. Stavke definiraju popis nizova koji će se pojaviti na kontroli korisniku. U vrijeme dizajna, kada dvokliknite svojstvo Artikli, "Uređivač popisa stringova" omogućuje vam određivanje stavki. Svojstvo Item zapravo je potomak vrste TStrings.
Dvije žice po stavci na listi?
Postoje situacije kada želite prikazati popis struna korisniku, na primjer, u polju s popisom kontrola, ali i način na koji pohranite još jedan niz duž onog koji je prikazan korisniku.
Nadalje, možda biste željeli spremiti / priložiti više niza nego samo "običan" niz, što biste možda željeli dodavanje objekta stavki (nizu).
Listbox. Predmeti - TStrings "Zna" predmete!
Pogledajte objektu TStrings još jedan pogled u sustavu pomoći. Tu je objekti svojstvo koje predstavlja skup objekata koji su povezani sa svakim od
žice u svojstvu Strings - gdje svojstvo Strings navodi stvarne žice na popisu.Ako želite dodijeliti drugi niz (ili objekt) svakom nizu u okviru s popisom, morate popustiti svojstvo predmeta u vremenu izvođenja.
Dok možete koristiti Listbox. Stavke. Dodati metodu za dodavanje žice na popis, za pridruživanje objekta svakom nizu morat ćete upotrijebiti drugi pristup.
Listbox. Stavke. AddObject metoda prihvaća dva parametra. Prvi parametar, "Stavka", je tekst stavke. Drugi parametar, "AObject" je objekt povezan s stavkom.
Imajte na umu da okvir s popisom otkriva Dodaj Predmet metoda koja radi isto kao i Stavke. AddObject.
Dvije žice za jednu žicu
Budući da obje stavke. AddObject i AddItem prihvaćaju varijablu tipa TObject za svoj drugi parametar, redak poput:
// pogreška sastavljanja!
ListBox1.Items. AddObject ('zarko', 'gajic');
rezultirat će pogreškom pri sastavljanju: E2010 Nekompatibilne vrste: 'TObject' i 'string'.
Ne možete jednostavno unijeti niz za objekt jer u nizu Delphi for Win32 vrijednosti niza nisu objekti.
Da biste stavci okvira s popisom dodijelili drugi niz, trebate "transformirati" varijablu niza u objekt - potreban vam je prilagođeni TString objekt.
Cijeli niz za niz
Ako je druga vrijednost koju trebate pohraniti zajedno sa stavkom niza cijela vrijednost, zapravo ne trebate prilagođenu klasu TInteger.
ListBox1.AddItem ('Žarko Gajić', TObject (1973));
Gornja linija pohranjuje cijeli broj "1973" zajedno s dodanim nizom "Žarko Gajić".
Gore je izrađen izravni typecast od cijelog broja do objekta. Parametar "AObject" je zapravo 4-bajtni pointer (adresa) dodanog objekta. Budući da u Win32 cijeli broj zauzima 4 bajta - takav je tvrdi cast moguć.
Da biste vratili cijeli broj povezan s nizom, morate vratiti "objekt" na cijelu vrijednost:
// godina == 1973
godina: = Integer (ListBox1.Items). Objekata [ListBox1.Items. IndexOf ('Žarko Gajić')]);
Delphi kontrola za niz
Zašto se ovdje zaustaviti? Dodjeljivanje stringova i cijelih nizu nizu u okvir s popisom, kao što ste upravo doživjeli, predstavlja komad torte.
Budući da su Delphi kontrole zapravo objekti, možete dodati kontrolu na svaki niz prikazan u okviru s popisom.
Sljedeći kôd dodaje ListBox1 (spisak okvir) naslove svih kontrola TButtona na obrascu (stavite to u obrađivač događaja OnCreate događaja) zajedno s referencom na svaki gumb.
var idx: cijeli broj; početiza idx: = 0 do -1 + ComponentCount činipočetiako Komponente [IDX] je TButton zatim ListBox1.AddObject (TButton (Components [idx]). Natpis, komponente [idx]); kraj; kraj;
Da biste programski "kliknuli" gumb "drugi", možete upotrijebiti sljedeću izjavu:
TButton (ListBox1.Items).. Objekti [1]) Kliknite;
Želim dodijeliti svojim prilagođenim objektima strunoj stavci
U općenitijoj situaciji dodajte instance (objekte) vlastitih prilagođenih klasa:
tip TStudent = klasaprivatna fName: string; godina: cijeli broj; javnostsvojstvo Ime: čitanje niza fName; svojstvo Godina: cijeli broj čitati fYear; konstruktor Stvoriti(const Ime: niz; const godina: cijeli broj); kraj;... konstruktor TStudent. Stvoriti(const Ime: niz; const godina: cijeli broj); početi fName: = ime; godina: = godina; kraj; početi// na popis dodati dva niza / objekte -> studente ListBox1.AddItem ('John', TStudent. Stvori ('John', 1970)); ListBox1.AddItem ('Jack', TStudent. Stvori ('Jack', 1982); // zgrabite prvog učenika - Johna student: = ListBox1.Items. Objekti [0] kao TStudent; // prikažite Ivanovu godinu ShowMessage (IntToStr (student). Godina)); kraj;
Ono što ti stvoriš mora biti besplatno
Evo što Help ima reći o objektima u TStrings potomcima: TStrings objekt ne posjeduje objekte koje na taj način dodate. Objekti dodani TStrings objektu i dalje postoje čak i ako je TStrings instanca uništena. Moraju biti izričito uništeno aplikacijom.
Kada dodate objekte žicama - predmete koje stvarate - morate biti sigurni da ste oslobodili zauzetu memoriju ili ćete je imati curenje memorije
Općenita prilagođena procedura FreeObjects prihvaća varijablu tipa TStrings kao jedini parametar. FreeObjects će osloboditi sve objekte povezane sa stavkom na popisu niza. U gornjem primjeru, "studenti" (TStudent klasa) su priloženi niz u okviru s popisom, kad se aplikacija uskoro zatvara (na primjer glavni oblik OnDestroy događaja), morate osloboditi memoriju zauzeta:
FreeObjects (ListBox1.Items);
Napomena: Ovu proceduru nazivate samo kada ste sami stvorili predmete dodijeljene nizovnim stavkama.