Το TTreeView Δελφοί το στοιχείο εμφανίζει μια ιεραρχική λίστα στοιχείων- κόμβους δέντρων. Ένας κόμβος παρουσιάζεται με κείμενο κόμβου και μια προαιρετική εικόνα. Κάθε κόμβος σε μια δέντρο προβολής είναι μια παρουσία μιας κλάσης TTreeNode.
Ενώ μπορείτε να συμπληρώσετε την προβολή δέντρου με στοιχεία κατά το σχεδιασμό, χρησιμοποιήστε το TreeView Επεξεργασία στοιχείων, στις περισσότερες περιπτώσεις θα γεμίσετε την προβολή δέντρου στο χρόνο εκτέλεσης - ανάλογα με το τι είναι η αίτησή σας.
Ο επεξεργαστής στοιχείων TreeView αποκαλύπτει ότι υπάρχουν μόνο λίγες πληροφορίες που μπορείτε να "επισυνάψετε" σε έναν κόμβο: κείμενο και μερικούς δείκτες εικόνας (για κανονική κατάσταση, επεκταθεί, επιλεγμένο και παρόμοιο).
Στην ουσία, το στοιχείο προβολής δέντρου είναι εύκολο να προγραμματιστεί. Υπάρχουν μερικές μέθοδοι για να προσθέσετε νέους κόμβους στο δέντρο και να ορίσετε την ιεραρχία τους.
Δείτε πώς μπορείτε να προσθέσετε 10 κόμβους στην προβολή δέντρου (που ονομάζεται "TreeView1"). Σημειώστε ότι η ιδιότητα Ιδιότητες παρέχει πρόσβαση σε όλους τους κόμβους του δέντρου. Το AddChild προσθέτει έναν νέο κόμβο στην προβολή δέντρου. Η πρώτη παράμετρος είναι ο γονικός κόμβος (για τη δημιουργία της ιεραρχίας) και η δεύτερη παράμετρος είναι το κείμενο κόμβου.
Το AddChild επιστρέφει τον προστιθέμενο TTreeNode. Στα παραπάνω δείγμα κώδικα, και οι δέκα κόμβοι προστίθενται ως κόμβοι ρίζας (δεν έχουν γονικό κόμβο).
Σε οποιεσδήποτε πιο περίπλοκες καταστάσεις, θα θέλατε να έχουν οι κόμβοι σας περισσότερες πληροφορίες - κατά προτίμηση να έχουν κάποιες ειδικές αξίες (ιδιότητες) που είναι συγκεκριμένες για το έργο που αναπτύσσετε.
Ας υποθέσουμε ότι θέλετε να εμφανίσετε στοιχεία δεδομένων παραγγελιών πελατών από τη βάση δεδομένων σας. Κάθε πελάτης μπορεί να έχει περισσότερες παραγγελίες και κάθε παραγγελία αποτελείται από περισσότερα στοιχεία. Αυτή είναι μια ιεραρχική σχέση που μπορεί κανείς να εμφανίσει σε μια δέντρο:
Στη βάση δεδομένων σας θα υπάρχουν περισσότερες πληροφορίες για κάθε παραγγελία και για κάθε είδος. Η προβολή δέντρου εμφανίζει την τρέχουσα κατάσταση (μόνο για ανάγνωση) και θέλετε να δείτε ανά παραγγελία (ή ακόμα και ανά στοιχείο) λεπτομέρειες για την επιλεγμένη παραγγελία.
Όταν ο χρήστης επιλέξει τον κόμβο "Order_1_1", θέλετε τα στοιχεία της παραγγελίας (συνολικό ποσό, ημερομηνία, κλπ.) Να εμφανιστούν στον χρήστη.
Μπορείτε να συγκεντρώσετε τα απαιτούμενα δεδομένα από τη βάση δεδομένων, ΑΛΛΑ θα πρέπει να γνωρίζετε το μοναδικό αναγνωριστικό (ας πούμε μια ακέραια τιμή) της επιλεγμένης παραγγελίας για να πάρετε τα σωστά δεδομένα.
Χρειαζόμαστε έναν τρόπο αποθήκευσης αυτού του αναγνωριστικού παραγγελίας μαζί με τον κόμβο αλλά δεν μπορούμε να χρησιμοποιήσουμε την ιδιότητα Κείμενο. Η προσαρμοσμένη τιμή που πρέπει να αποθηκεύσουμε σε κάθε κόμβο είναι ένας ακέραιος αριθμός (μόνο ένα παράδειγμα).
Όταν συμβαίνει μια τέτοια κατάσταση, ενδέχεται να μπείτε στον πειρασμό να αναζητήσετε την ιδιότητα Ετικέτα (πολλά συστατικά Delphi έχουν), αλλά η ιδιότητα Tag δεν εκτίθεται από την κλάση TTreeNode.
Προσθήκη προσαρμοσμένων δεδομένων στους κόμβους των δένδρων: Το TreeNode. Ιδιότητα δεδομένων
Η ιδιότητα Δεδομένα ενός κόμβου δέντρου σάς επιτρέπει να συσχετίσετε τα προσαρμοσμένα δεδομένα σας με έναν κόμβο δέντρου. Τα δεδομένα είναι a δείκτης και μπορεί να δείχνει αντικείμενα και αρχεία. Η προβολή δεδομένων XML (Τροφοδοσία RSS) σε ένα TreeView δείχνει πώς να αποθηκεύσετε το a είδος εγγραφής μεταβλητή στην ιδιότητα δεδομένων ενός κόμβου δέντρου.
Πολλές κλάσεις τύπου αντικειμένου εκθέτουν την ιδιότητα Δεδομένα-μπορείτε να χρησιμοποιήσετε για την αποθήκευση οποιουδήποτε αντικειμένου μαζί με το στοιχείο. Ένα παράδειγμα είναι το TListItem ενός συστατικού TListView. Εδώ πώς να προσθέσετε αντικείμενα στην ιδιότητα Δεδομένα.
Προσθήκη προσαρμοσμένων δεδομένων στους κόμβους των δέντρων: Το TreeView. CreateNodeClass
Εάν δεν θέλετε να χρησιμοποιήσετε την ιδιότητα Data του TTreeNode, αλλά θέλετε να έχετε το δικό σας TreeNode εκτεταμένο με μερικές ιδιότητες, ο Delphi έχει επίσης μια λύση.
Πέστε ότι θέλεις να το κάνεις
Εδώ μπορείτε να επεκτείνετε το πρότυπο TTreeNode με μερικές δικές σας ιδιότητες:
- Δημιουργήστε το TMyTreeNode σας επεκτείνοντας το TTreeNode.
- Προσθέστε την ιδιότητα string MyProperty.
- Χειριστείτε το OnCreateNodeClass για την προβολή δέντρου για να καθορίσετε την κλάση κόμβου που θα δημιουργηθεί.
- Εκθέστε κάτι όπως η ιδιότητα TreeView1_SelectedNode στο επίπεδο της φόρμας. Αυτό θα ήταν τύπου TMyTreeNode.
- Χειριστείτε την OnChange προβολή δέντρου για να γράψετε στο SelectedNode την τιμή του κόμβου που έχει επιλεγεί.
- Χρησιμοποιήστε το TreeView1_Selected.myProperty για να διαβάσετε ή να γράψετε νέα προσαρμοσμένη τιμή.
Εδώ είναι ο πλήρης κώδικας πηγής (TButton: "Button1" και TTreeView: "TreeView1" σε μια φόρμα):
Αυτή τη φορά δεν χρησιμοποιείται η ιδιότητα Δεδομένα της κλάσης TTreeNode. Αντίθετα, επεκτείνετε την κλάση TTreeNode για να έχετε τη δική σας έκδοση ενός κόμβου δέντρου: TMyTreeNode.
Χρησιμοποιώντας το συμβάν OnCreateNodeClass της δέντρο προβολής, δημιουργείτε έναν κόμβο της προσαρμοσμένης κλάσης σας αντί της τυπικής κλάσης TTreenode.