Sla meer aangepaste gegevens op in het boomknooppunt in Delphi

De TTreeView Delphi component geeft een hiërarchische lijst met items weer— boomknooppunten. Een knooppunt wordt weergegeven door knooppunttekst en een optionele afbeelding. Elk knooppunt in een boomstructuur is een instantie van een TTreeNode-klasse.

Terwijl u tijdens het ontwerpen de boomweergave kunt invullen met items, met behulp van de TreeView Items Editor, in de meeste gevallen zou u uw boomstructuur tijdens runtime vullen, afhankelijk van waar uw toepassing over gaat.

De TreeView Items Editor onthult dat er maar een handvol informatie is die je kunt "koppelen" aan een knooppunt: tekst en een paar beeldindexen (voor de normale staat, uitgevouwen, geselecteerd en hetzelfde).

In wezen is de boomweergave-component eenvoudig te programmeren. Er zijn een aantal methoden om nieuwe knooppunten aan de boom toe te voegen en hun hiërarchie in te stellen.

Hier leest u hoe u 10 knooppunten aan de boomstructuur toevoegt (genaamd "TreeView1"). Merk op dat de eigenschap Items toegang biedt tot alle knooppunten in de boom. De AddChild voegt een nieuw knooppunt toe aan de boomweergave. De eerste parameter is het bovenliggende knooppunt (om de hiërarchie op te bouwen) en de tweede parameter is de knooppunttekst.

instagram viewer

De AddChild retourneert de nieuw toegevoegde TTreeNode. In bovenstaande code voorbeeldworden alle 10 knooppunten toegevoegd als hoofdknooppunten (hebben geen bovenliggend knooppunt).

In meer complexe situaties zou u willen dat uw knooppunten meer informatie bevatten - bij voorkeur met een aantal speciale waarden (eigenschappen) die specifiek zijn voor het project dat u ontwikkelt.

Stel dat u klantorderitemgegevens uit uw database wilt weergeven. Elke klant kan meer bestellingen hebben en elke bestelling is samengesteld uit meer artikelen. Dit is een hiërarchische relatie die in een boomstructuur kan worden weergegeven:

In uw database zou er meer informatie zijn voor elke bestelling en voor elk item. De boomweergave geeft de (alleen-lezen) huidige status weer - en u wilt per bestelling (of zelfs per item) details zien voor de geselecteerde bestelling.

Wanneer de gebruiker het knooppunt "Order_1_1" selecteert, wilt u dat de bestelgegevens (totaalbedrag, datum, enz.) Aan de gebruiker worden weergegeven.

U kunt op dat moment de vereiste gegevens uit de database ophalen, MAAR u zou de unieke identificatie (laten we zeggen een geheel getal) van de geselecteerde volgorde moeten kennen om de juiste gegevens te verzamelen.

We hebben een manier nodig om deze order-ID samen met het knooppunt op te slaan, maar we kunnen de eigenschap Text niet gebruiken. De aangepaste waarde die we in elk knooppunt moeten opslaan, is een geheel getal (slechts een voorbeeld).

Wanneer een dergelijke situatie zich voordoet, kom je misschien in de verleiding om naar de eigenschap Tag te zoeken (veel Delphi-componenten hebben dit), maar de eigenschap Tag wordt niet weergegeven door de klasse TTreeNode.

Aangepaste gegevens toevoegen aan boomknooppunten: de boomknoop. Gegevenseigenschap

Met de eigenschap Data van een boomknooppunt kunt u uw aangepaste gegevens aan een boomknooppunt koppelen. Gegevens zijn een wijzer en kan verwijzen naar objecten en records. De XML-gegevens (RSS-feed) weergeven in een TreeView laat zien hoe u een recordtype variabele in de eigenschap Data van een boomknooppunt.

Veel itemtypeklassen geven de eigenschap Data weer: u kunt elk object samen met het item opslaan. Een voorbeeld is het TListItem van een TListView-component. Hier is hoe u objecten toevoegt aan de eigenschap Data.

Voeg aangepaste gegevens toe aan boomknooppunten: de TreeView. CreateNodeClass

Als u de Data-eigenschap van de TTreeNode niet wilt gebruiken, maar liever uw eigen TreeNode wilt uitbreiden met een paar eigenschappen, heeft Delphi ook een oplossing.

Stel dat je het wilt kunnen doen

Hier leest u hoe u de standaard TTreeNode kunt uitbreiden met een paar eigen eigenschappen:

  1. Creëer uw TMyTreeNode door de TTreeNode uit te breiden.
  2. Voeg het een stringeigenschap MyProperty toe.
  3. Behandel de OnCreateNodeClass voor de boomweergave om te specificeren dat uw knooppuntklasse moet worden gemaakt.
  4. Stel zoiets als TreeView1_SelectedNode-eigenschap bloot op formulierniveau. Dit zou van het type TMyTreeNode zijn.
  5. Behandel de OnChange van de boomweergave om naar de SelectedNode de waarde van het geselecteerde knooppunt te schrijven.
  6. Gebruik TreeView1_Selected.myProperty om een ​​nieuwe aangepaste waarde te lezen of te schrijven.

Hier is de volledige broncode (TButton: "Button1" en TTreeView: "TreeView1" op een formulier):

Deze keer wordt de eigenschap Data van de klasse TTreeNode niet gebruikt. In plaats daarvan breidt u de klasse TTreeNode uit met uw eigen versie van een boomknooppunt: TMyTreeNode.

Met behulp van de OnCreateNodeClass-gebeurtenis van de structuurweergave maakt u een knooppunt van uw aangepaste klasse in plaats van de standaard TTreenode-klasse.