„Delphi“ „TListBox“ ir „TComboBox“ pateikia elementų sąrašą - stygas „pasirenkamų“ sąraše. „TListBox“ rodo slenkamą sąrašą, „TComboBox“ - išskleidžiamąjį sąrašą.
Visų aukščiau išvardytų valdiklių bendroji savybė yra Daiktai nuosavybė. Elementai apibūdina stygų, kurios vartotojui pasirodys valdiklyje, sąrašą. Projektavimo metu dukart spustelėdami nuosavybę Elementai, „Styginių sąrašo redaktorius“ leidžia nurodyti eilutės elementus. Elementai iš tikrųjų yra TStrings tipo palikuonys.
Dvi stygos viename sąrašo langelyje?
Yra situacijų, kai norite parodyti stygų sąrašas vartotojui, pavyzdžiui, sąrašo laukelio valdyme, bet taip pat turi būdą, kaip išsaugokite dar vieną papildomą eilutę palei vartotojui rodomą eilutę.
Be to, galbūt norėsite išsaugoti / pridėti ne tik „paprastą“ eilutę, bet ir ją pridėti objektą prie elemento (eilutės).
„ListBox“. Daiktai - TStrings „žino“ daiktus!
Padėkite „TStrings“ objektui dar vieną žvilgsnį pagalbos sistemoje. Yra Objektai nuosavybė, kuri žymi objektų, susietų su kiekviena iš jų, rinkinį
stygos nuosavybėje „Stygos“ - kai ypatybė „Stygos“ nurodo tikras sąrašo eilutes.Jei norite priskirti antrą eilutę (arba objektą) kiekvienai sąrašo laukelio eilutei, turite užpildyti ypatybes Elementai vykdymo metu.
Nors galite naudoti „ListBox“. Daiktai. Papildyti metodas pridėti eilutes prie sąrašo, susieti objektą su kiekviena eilute, turėsite naudoti kitą metodą.
„ListBox“. Daiktai. „AddObject“ metodas priima du parametrus. Pirmasis parametras „Prekė“ yra elemento tekstas. Antrasis parametras „AObject“ yra objektas, susietas su elementu.
Atminkite, kad sąrašo lauke yra Pridėti daiktą metodas, kuris daro tą patį kaip daiktai. „AddObject“.
Dvi stygos vienai stygai
Kadangi abu daiktai. „AddObject“ ir „AddItem“ priima TObject tipo kintamąjį antrajam parametrui, tokiai kaip:
// sudarykite klaidą!
„ListBox1.Items“. „AddObject“ ('zarko', 'gajic');
sukels kompiliavimo klaidą: E2010 nesuderinami tipai: „TObject“ ir „string“.
Negalite tiesiog pateikti objekto eilutės, nes „Delphi for Win32“ eilutės reikšmės nėra objektai.
Norėdami priskirti antrą eilutę sąrašo laukelio elementui, turite „transformuoti“ eilutės kintamąjį į objektą - jums reikia pasirinktinio TString objekto.
Sveikasis skaičius styginiams
Jei antroji reikšmė, kurią turite saugoti kartu su eilutės elementu, yra sveikasis skaičius, jums iš tikrųjų nereikia pasirinktinės „TInteger“ klasės.
„ListBox1.AddItem“ („Zarko Gajic“, TObject (1973));
Viršutinėje eilutėje yra sveikasis skaičius „1973“ kartu su pridėta „Zarko Gajic“ eilute.
Aukščiau pateiktas tiesioginis raštas iš sveikojo skaičiaus į objektą. Parametras „AObject“ iš tikrųjų yra pridėto objekto 4 baitų rodyklė (adresas). Kadangi „Win32“ sveikasis skaičius užima 4 baitus - toks kietas perdavimas yra įmanomas.
Norėdami grąžinti sveiką skaičių, susietą su eilute, turite grąžinti „objektą“ prie sveikojo skaičiaus:
// metai == 1973 m
metai: = sveikasis skaičius („ListBox1.Items“). Objektai [ListBox1.Items. IndexOf ('Zarko Gajic')]);
„Delphi“ stygos valdymas
Kodėl čia reikia sustoti? Styginių ir sveikųjų skaičių priskyrimas eilutės sąrašo laukelyje, kaip jūs ką tik patyrėte, yra pyrago gabalas.
Kadangi „Delphi“ valdikliai iš tikrųjų yra objektai, valdiklį galite prisegti prie kiekvienos sąrašo lauke rodomos eilutės.
Šis kodas prideda prie visų formos „TButton“ valdiklių antraščių „ListBox1“ (sąrašo laukelyje) antraščių (įdėkite tai į formos „OnCreate“ įvykių tvarkytuvą) kartu su nuoroda į kiekvieną mygtuką.
var idx: sveikasis skaičius; prasidedadėl idx: = 0 į -1 + „ComponentCount“ darytiprasidedajei Komponentai [idx] yra TB mygtukas tada „ListBox1.AddObject“ („TButton“ (komponentai [idx]). Antraštė, komponentai [idx]); galas; galas;
Norėdami programiškai „spustelėti“ mygtuką „antras“, galite naudoti kitą teiginį:
TB mygtukas („ListBox1.Items“). Objektai [1]) .Spustelėkite;
Noriu priskirti savo pasirinktinius objektus styginiams elementams
Įprastesnėje situacijoje pridėtumėte savo pasirinktų klasių pavyzdžius (objektus):
tipo TStudentas = klasėprivatus fName: eilutė; fYear: sveikasis skaičius; viešainuosavybė Vardas: stygų skaitymas fName; nuosavybė Metai: sveikasis skaičius skaityti fYear; konstruktorius Sukurti (const vardas: stygos; const metai: sveikasis skaičius; galas;... konstruktorius TStudentas. Sukurti (const vardas: stygos; const metai: sveikasis skaičius; prasideda fName: = vardas; metai: = metai; galas; prasideda// Įtraukite į sąrašą dvi eilutes / objektus -> studentus „ListBox1.AddItem“ („Jonas“, TStudentas. Kurti ('John', 1970)); „ListBox1.AddItem“ („Jack“, „TStudent“). Kurti („Džekas“, 1982)); // patraukti pirmąjį mokinį - Joną studentas: = „ListBox1.Items“. Objektai [0] kaip TStudentas; // rodyti Jono metus „ShowMessage“ („IntToStr“ (studentas. Metai)); galas;
Tai, ką sukūrei, turi išlaisvinti
Štai ką „Žinynas“ turi pasakyti apie „TStrings“ palikuonių objektus: „TStrings“ objektas neturi objektų, kuriuos pridėjote tokiu būdu. Prie TStrings objekto pridedami objektai vis dar egzistuoja, net jei TStrings egzempliorius yra sunaikintas. Jie turi būti aiškiai sunaikinta pagal prašymą.
Kai pridedate objektus prie stygų - objektus, kuriuos sukuriate - turite įsitikinti, kad atlaisvinsite užimtą atmintį, arba turėsite atminties nutekėjimas
Bendroji pasirinktinė procedūra „FreeObjects“ kaip vienintelį parametrą priima TStrings tipo kintamąjį. „FreeObjects“ išlaisvins visus objektus, susietus su stygų sąrašo elementu. Aukščiau pateiktame pavyzdyje „studentai“ („TStudent“ klasė) pridedami prie eilutę sąrašo laukelyje, kai programa bus uždaryta (pavyzdžiui, pagrindinės formos „OnDestroy“ įvykis), jums reikia atlaisvinti atminties užimtas:
„FreeObjects“ („ListBox1.Items“);
Pastaba: šią procedūrą galite atlikti tik tada, kai eilutės elementams priskirtus objektus sukūrėte jūs patys.