Delphin TListBox ja TComboBox näyttävät luettelon kohteista - merkkijonot "valittavissa" -luettelossa. TListBox näyttää vieritettävän luettelon, TComboBox näyttää avattavan luettelon.
Kaikkien yllä mainittujen hallintalaitteiden yhteinen ominaisuus on Tuotteet omaisuutta. Kohteet määrittelevät luettelon merkkijonoista, jotka ilmestyvät käyttäjän ohjaukseen. Kun kaksoisnapsautat Kohteet-ominaisuutta suunnittelun aikana, "String List Editor" antaa sinun määrittää merkkijonot. Tuotteet-ominaisuus on oikeastaan TStrings-tyyppinen jälkeläinen.
Kaksi merkkijonoa kohtaa luetteloruudussa?
On tilanteita, joissa haluat näyttää a merkkijonojen luettelo käyttäjälle, esimerkiksi luetteloruudun ohjauksessa, mutta heillä on myös tapa tallenna vielä yksi ylimääräinen merkkijono käyttäjille näytettävää pitkin.
Lisäksi haluat ehkä tallentaa / liittää merkkijonoon enemmän kuin vain "tavallisen" merkkijonon, saatat haluta liitä esine esineeseen (merkkijono).
ListBox-. Tuotteet - TStrings "tietää" esineet!
Anna TStrings-objektille vielä yksi ilme ohjejärjestelmässä. Siellä on esineet ominaisuus, joka edustaa joukko objekteja, jotka on liitetty kuhunkin jouset Strings-ominaisuudessa - jossa Strings-ominaisuus viittaa luettelon todellisiin merkkijonoihin.
Jos haluat määrittää toisen merkkijonon (tai objektin) jokaiselle luetteloruudun merkkijonolle, sinun on täytettävä kohteet-ominaisuus ajon aikana.
Vaikka voit käyttää ListBox-. Kohteita. Lisätä menetelmä merkkijonojen lisäämiseksi luetteloon, objektin liittämiseksi jokaiseen merkkijonoon, sinun on käytettävä toista lähestymistapaa.
ListBox-. Kohteita. AddObject menetelmä hyväksyy kaksi parametria. Ensimmäinen parametri, "Kohde", on kohteen teksti. Toinen parametri, "AObject", on kohtaan liittyvä objekti.
Huomaa, että luetteloruutu paljastaa Lisää tavara menetelmä, joka tekee saman kuin tuotteet. AddObject.
Kaksi kieltä yhdelle kielille
Koska molemmat tuotteet. AddObject ja AddItem hyväksyvät TObject-tyyppisen muuttujan toiselle parametrilleen, riville kuten:
// käännä virhe!
ListBox1.Items. AddObject ('zarko', 'gajic');
johtaa käännösvirheeseen: E2010 Yhteensopimattomat tyypit: 'TObject' ja 'merkkijono'.
Et voi vain antaa merkkijonoa objektille, koska Delphi for Win32 -merkkijonossa arvot eivät ole objekteja.
Jos haluat määrittää toisen merkkijonon luetteloruudun kohteelle, sinun on "muutettava" merkkijonomuuttuja objektiin - tarvitset mukautetun TString-objektin.
Kokonaisluku merkkijonolle
Jos toinen arvo, joka sinun on tallennettava merkkijonoelementin kanssa, on kokonaisluku, et oikeastaan tarvitse mukautettua TInteger-luokkaa.
ListBox1.AddItem ('Zarko Gajic', TObject (1973));
Yläpuolella olevaan riviin tallennetaan kokonaisluku "1973" yhdessä lisätyn "Zarko Gajic" -merkkijonon kanssa.
Suora typecast kokonaisluvusta objektiin tehdään yllä. "AObject" -parametri on tosiasiallisesti lisätyn objektin 4 tavun osoitin (osoite). Koska Win32: ssa kokonaisluku vie 4 tavua - niin kova valetus on mahdollista.
Jos haluat palauttaa merkkijonoon liittyvän kokonaisluvun, sinun täytyy heittää "objekti" takaisin kokonaislukuarvoon:
// vuosi == 1973
vuosi: = Kokonaisluku (ListBox1.Tiedot. Objects [ListBox1.Items. IndexOf ('Zarko Gajic')]);
Delphi-säädin merkkijonolle
Miksi lopettaa täällä? Merkkijonojen ja kokonaislukujen osoittaminen merkkijonoon luetteloruudussa on, kuten juuri kokenut, pala kakkua.
Koska Delphi-säätimet ovat tosiasiallisesti objekteja, voit liittää ohjaimen jokaisessa luetteloruudussa näkyvässä merkkijonossa.
Seuraava koodi lisää kaikkien lomakkeessa olevien TButton-säätimien ListBox1 (luetteloruutu) -tekstit (sijoita tämä lomakkeen OnCreate-tapahtumakäsittelijään) sekä viittaus jokaiseen painikkeeseen.
var idx: kokonaisluku; alkaavarten idx: = 0 että -1 + ComponentCount tehdäalkaajos Komponentit [idx] On TButton sitten ListBox1.AddObject (TButton (Komponentit [idx]). Kuvateksti, Komponentit [idx]); pää; pää;
Voit napsauttaa "toista" -painiketta ohjelmallisesti seuraavan lauseen avulla:
TBpainike (ListaBox1.Tiedot. Esineet [1]). Valitse;
Haluan määrittää mukautetut objektini merkkijonoon
Yleisemmässä tilanteessa lisäät omien mukautettujen luokkiesi esiintymät (esineet):
tyyppi TSopiskelija = luokkayksityinen fName: merkkijono; fYear: kokonaisluku; julkinenomaisuus Nimi: merkkijono luettu fname; omaisuus Vuosi: kokonaisluku lukea fYear; rakentaja Luoda(const nimi: jono; const vuosi: kokonaisluku); pää;... rakentaja TStudent. Luoda(const nimi: jono; const vuosi: kokonaisluku); alkaa fName: = nimi; fYear: = vuosi; pää; alkaa// lisää kaksi merkkijonoa / objektia -> oppilaat luetteloon ListBox1.AddItem ('John', TSopiskelija. Luo ('John', 1970)); ListBox1.AddItem ('Jack', TStudent. Luo ('Jack', 1982)); // tartu ensimmäinen oppilas - John opiskelija: = ListBox1.Tiedot. Esineet [0] kuten TStudent; // näytä Johanneksen vuosi ShowMessage (IntToStr (opiskelija. Vuosi)); pää;
Mitä luot, sinun täytyy vapauttaa
Tässä on mitä ohjeella on sanottavaa TStrings-jälkeläisten objekteista: TStrings-objekti ei omista tällä tavalla lisäämiäsi objekteja. TStrings-objektiin lisätyt objektit ovat edelleen olemassa, vaikka TStrings-esimerkki tuhoutuisi. Niiden on oltava tuhottu nimenomaisesti sovelluksen avulla.
Kun lisäät esineitä jousille - luomillesi objekteille -, sinun on varmistettava, että vapautat muistin, jota sinulla on, tai sinulla on muistivuoto
Yleinen mukautettu menettely FreeObjects hyväksyy muuttujan tyyppiset TS-raidat ainoaksi parametrikseen. FreeObjects vapauttaa kaikki merkkijonojen luettelon kohteisiin liittyvät objektit. Yllä olevassa esimerkissä "opiskelijat" (TStudent-luokka) liitetään merkkijono luetteloruudussa, kun sovellus on sulkemassa (esimerkiksi OnDestroy-päätapahtuma), sinun on vapautettava muisti täytettyjä:
FreeObjects (ListBox1.Items);
Huomaa: Soitat tähän menettelyyn vain, kun olet luonut merkkijonoelementeille määritetyt objektit.