Saugokite daugiau pasirinktinių duomenų medžio mazge Delfyje

„TTreeView“ Delfi komponentas rodo hierarchinį elementų sąrašą - medžio mazgai. Mazgas pateikiamas mazgo tekstu ir pasirenkamu atvaizdu. Kiekvienas medžio rodinio mazgas yra „TTreeNode“ klasės pavyzdys.

Nors projektavimo metu galite užpildyti medžio rodinį elementais, naudodami „TreeView“ elementų redaktorius, dažniausiai medžio vaizdą užpildytumėte vykdymo metu - atsižvelgiant į tai, apie ką jūsų programa.

„TreeView“ elementų rengyklė atskleidžia, kad yra tik nedaugelis informacijos, kurią galite „prisegti“ prie mazgo: tekstas ir kelios vaizdų rodyklės (normaliai būsenai - išplėstos, pasirinktos ir panašios).

Iš esmės medžio peržiūros komponentą lengva programuoti. Yra keletas būdų, kaip į medį įtraukti naujus mazgus ir nustatyti jų hierarchiją.

Štai kaip pridėti 10 mazgų prie medžio rodinio (pavadinto „TreeView1“). Atminkite, kad nuosavybė „Elementai“ suteikia prieigą prie visų medžio mazgų. „AddChild“ prideda naują mazgą medžio vaizde. Pirmasis parametras yra pagrindinis mazgas (hierarchijai sukurti), o antrasis parametras yra mazgo tekstas.

instagram viewer

„AddChild“ grąžina ką tik pridėtą „TTreeNode“. Aukščiau kodo pavyzdys, visi 10 mazgų pridedami kaip šakniniai mazgai (neturi pagrindinio mazgo).

Bet kokiose sudėtingesnėse situacijose norėtumėte, kad jūsų mazgai gautų daugiau informacijos - geriau, kad jie turėtų kokių nors specialių verčių (savybių), būdingų jūsų kuriamam projektui.

Tarkime, kad norite iš klientų duomenų bazės rodyti klientų užsakymų-elementų duomenis. Kiekvienas klientas gali turėti daugiau užsakymų, o kiekvienas užsakymas sudaromas iš daugiau prekių. Tai yra hierarchinis ryšys, kurį galima parodyti medžio vaizde:

Jūsų duomenų bazėje būtų daugiau informacijos apie kiekvieną užsakymą ir kiekvieną prekę. Medžio rodinyje rodoma (tik skaitoma) dabartinė būsena - ir jūs norite pamatyti pasirinktos užsakymo informaciją apie kiekvieną užsakymą (ar net elementą).

Kai vartotojas pasirenka mazgą „Order_1_1“, norite, kad vartotojui būtų parodyta išsami užsakymo informacija (bendra suma, data ir kt.).

Tuo metu galite gauti reikiamus duomenis iš duomenų bazės, BET jums reikės žinoti pasirinktos užsakymo unikalų identifikatorių (sakykime sveikąją vertę), kad gautumėte teisingus duomenis.

Mums reikalingas būdas išsaugoti šį užsakymo identifikatorių kartu su mazgu, tačiau mes negalime naudoti nuosavybės „Tekstas“. Tinkinta vertė, kurią turime saugoti kiekviename mazge, yra sveikasis skaičius (tik pavyzdys).

Atsitikus tokiai situacijai, jums gali kilti pagunda ieškoti žymės ypatybės (ją turi daugelis „Delphi“ komponentų), tačiau žyma ypatybė neatskleidžiama TTreeNode klasėje.

Pridėti pasirinktinius duomenis prie medžio mazgų: „TreeNode“. Duomenų nuosavybė

Medžio mazgo savybė „Data“ leidžia susieti pasirinktinius duomenis su medžio mazgu. Duomenys yra a rodyklė ir gali nurodyti objektus ir įrašus. XML (RSS) duomenų rodymas medžio peržiūroje rodo, kaip laikyti įrašo tipas kintamasis į medžio mazgo duomenų savybę.

Daugybė elemento tipo klasių atskleidžia duomenų savybę - galite naudoti bet kurį objektą kartu su elementu. Pavyzdys yra „TListView“ komponento TListItem. Štai kaip pridėti objektus prie duomenų savybės.

Įtraukite pasirinktinius duomenis į medžio mazgus: „TreeView“. „CreateNodeClass“

Jei nenorite naudoti „TTreeNode“ duomenų savybės, o norite, kad savo „TreeNode“ išplėstų keliomis ypatybėmis, „Delphi“ taip pat turi sprendimą.

Sako, kad nori sugebėti

Štai kaip išplėsti standartinį „TTreeNode“ su keliomis jūsų savybėmis:

  1. Sukurkite savo „TMyTreeNode“ pratęsdami „TTreeNode“.
  2. Pridėkite jį prie „MyProperty“ ypatybės.
  3. Tvarkykite „OnCreateNodeClass“ medžio rodinyje, kad nurodytumėte, kokia turėtų būti sukurta mazgo klasė.
  4. Pavidalo pavidalu atskleiskite kažką panašaus į „TreeView1_SelectedNode“ nuosavybę. Tai būtų TMyTreeNode tipas.
  5. Tvarkykite medžio rodinio „OnChange“, kad parašytumėte į „SelectedNode“ pasirinkto mazgo vertę.
  6. Norėdami skaityti ar rašyti naują pasirinktinę vertę, naudokite „TreeView1_Selected.myProperty“.

Čia yra visas šaltinio kodas (formos mygtukas: „Button1“ ir „TTreeView“: „TreeView1“):

Šį kartą „TTreeNode“ klasės duomenų savybė nenaudojama. Atvirkščiai, jūs išplėsite TTreeNode klasę, kad turėtumėte savo medžio mazgo versiją: TMyTreeNode.

Naudodamiesi medžio rodinio „OnCreateNodeClass“ įvykiu, vietoje įprastos „TTreenode“ klasės sukuriate pasirinktinės klasės mazgą.

instagram story viewer