Il TTreeView Delphi componente visualizza un elenco gerarchico di elementi: nodi dell'albero. Un nodo è presentato dal testo del nodo e un'immagine opzionale. Ogni nodo in una vista ad albero è un'istanza di una classe TTreeNode.
Mentre è possibile compilare la vista ad albero con elementi in fase di progettazione, utilizzando il Editor di elementi TreeView, nella maggior parte dei casi riempiresti la visualizzazione ad albero in fase di esecuzione, a seconda dell'argomento di applicazione.
L'Editor degli articoli di TreeView rivela che esiste solo una manciata di informazioni che è possibile "collegare" a un nodo: testo e alcuni indici di immagine (per lo stato normale, espansi, selezionati e simili).
In sostanza, il componente di visualizzazione ad albero è facile da programmare. Esistono un paio di metodi per aggiungere nuovi nodi all'albero e impostarne la gerarchia.
Ecco come aggiungere 10 nodi alla vista ad albero (denominata "TreeView1"). Si noti che la proprietà Items fornisce l'accesso a tutti i nodi nella struttura. AddChild aggiunge un nuovo nodo alla vista ad albero. Il primo parametro è il nodo padre (per costruire la gerarchia) e il secondo parametro è il testo del nodo.
AddChild restituisce il TTreeNode appena aggiunto. Nel sopra esempio di codice, tutti i 10 nodi vengono aggiunti come nodi principali (non hanno un nodo principale).
In situazioni più complesse, i tuoi nodi dovrebbero contenere più informazioni, preferibilmente con valori (proprietà) specifici per il progetto che stai sviluppando.
Supponiamo che tu voglia visualizzare i dati degli articoli dell'ordine cliente dal tuo database. Ogni cliente può avere più ordini e ogni ordine è composto da più articoli. Questa è una relazione gerarchica che è possibile visualizzare in una vista ad albero:
Nel tuo database ci sarebbero più informazioni per ogni ordine e per ogni articolo. La vista ad albero mostra lo stato corrente (sola lettura) e si desidera visualizzare i dettagli per ordine (o anche per articolo) per l'ordine selezionato.
Quando l'utente seleziona il nodo "Ordine_1_1" si desidera che i dettagli dell'ordine (somma totale, data, ecc.) Vengano visualizzati all'utente.
È possibile, in quel momento, recuperare i dati richiesti dal database, MA sarebbe necessario conoscere l'identificatore univoco (diciamo un valore intero) dell'ordine selezionato per acquisire i dati corretti.
Abbiamo bisogno di un modo per memorizzare questo identificativo dell'ordine insieme al nodo ma non possiamo usare la proprietà Text. Il valore personalizzato che dobbiamo memorizzare in ciascun nodo è un numero intero (solo un esempio).
Quando si verifica una situazione del genere, potresti essere tentato di cercare la proprietà Tag (molti componenti Delphi hanno) ma la proprietà Tag non è esposta dalla classe TTreeNode.
Aggiungi dati personalizzati ai nodi dell'albero: Il TreeNode. Proprietà dei dati
La proprietà Data di un nodo ad albero consente di associare i dati personalizzati a un nodo ad albero. I dati sono a pointer e può puntare a oggetti e record. La visualizzazione dei dati XML (feed RSS) in un TreeView mostra come memorizzare un tipo di registrazione variabile nella proprietà Data di un nodo ad albero.
Molte classi di tipo di elemento espongono la proprietà Data: è possibile utilizzare per archiviare qualsiasi oggetto insieme all'elemento. Un esempio è il TListItem di un componente TListView. Ecco come aggiungere oggetti alla proprietà Data.
Aggiungi dati personalizzati ai nodi dell'albero: TreeView. CreateNodeClass
Se non si desidera utilizzare la proprietà Data di TTreeNode, ma si desidera estendere il proprio TreeNode con alcune proprietà, Delphi ha anche una soluzione.
Di 'che vuoi essere in grado di fare
Ecco come estendere il TTreeNode standard con alcune proprietà:
- Crea il tuo TMyTreeNode estendendo il TTreeNode.
- Aggiungi una proprietà stringa MyProperty.
- Gestire OnCreateNodeClass per la vista ad albero per specificare la classe del nodo da creare.
- Esporre qualcosa come la proprietà TreeView1_SelectedNode a livello di modulo. Questo sarebbe di tipo TMyTreeNode.
- Gestire OnChange della vista ad albero per scrivere in SelectedNode il valore del nodo selezionato.
- Utilizzare TreeView1_Selected.myProperty per leggere o scrivere un nuovo valore personalizzato.
Ecco il codice sorgente completo (TButton: "Button1" e TTreeView: "TreeView1" in un modulo):
Questa volta non viene utilizzata la proprietà Data della classe TTreeNode. Piuttosto, estendi la classe TTreeNode per avere la tua versione di un nodo ad albero: TMyTreeNode.
Utilizzando l'evento OnCreateNodeClass della vista ad albero, si crea un nodo della classe personalizzata anziché la classe TTreenode standard.