A. Introduzione .
Microsoft Tree View Control fa parte dei controlli comuni di Microsoft Windows. È un pezzo interessante di Object che mostra i dati correlati in una gerarchia di nodi. Può visualizzare dati correlati, come voci e sottovoci in un elenco di indici o un elenco di cartelle come il riquadro sinistro di Esplora risorse o un elenco di elementi correlati in una struttura gerarchica con linee ad albero, caselle di controllo e grafica di immagini bitmap .
La Vista elenco e Elenco immagini I controlli fanno parte dei controlli comuni di Windows e li utilizzeremo insieme al controllo TreeView in Microsoft Access.
Penso che ti piacerebbe guardare alcune immagini demo di TreeView Control di esempio, su cui lavoreremo a costruire nelle prossime settimane.
B. Esempi di immagini demo .
Nodi nello stato compresso.
- L'immagine demo TreeView di esempio con tutti i nodi in formato compresso.
Nodi nella vista espansa.
- I nodi di controllo TreeView sopra nella vista espansa.
Con icone immagine freccia.
- Visualizzazione di esempio TreeView, con icone immagine a forma di freccia visualizzate a sinistra di ciascun testo del nodo.
I nodi a livello di radice hanno le immagini delle cartelle, altri con la punta della freccia.
- Successivamente, la visualizzazione TreeView con i dati collegati in un sottomodulo. I nodi di livello radice hanno due immagini. L'immagine a cartella chiusa viene visualizzata in modalità normale. Quando il nodo di livello principale riceve un clic del mouse, visualizza l'immagine di apertura della cartella e visualizza i nodi figlio in forma espansa.
Le informazioni correlate vengono visualizzate nel modulo secondario in base alla selezione del nodo a livello radice.
Uno degli elementi del nodo figlio selezionato mostra un altro modulo (normalmente tenuto nascosto) con le relative informazioni.
Controlli TreeView e ListView
- Nell'immagine successiva del modulo, ci sono due pannelli. I nodi relativi all'elemento della categoria prodotto si trovano in TreeView Control, nel pannello di sinistra. Quando uno degli elementi della categoria riceve un clic sul controllo TreeView, gli elementi del prodotto correlati con quantità e prezzo di listino in colonne separate verranno visualizzati in ListView Controllo, nel pannello di destra.
C. Creazione di dati di esempio per l'esecuzione di prova.
Proviamo il controllo TreeView con alcuni dati di esempio mostrati di seguito, basati sulle prime due immagini mostrate all'inizio di questa Pagina.
La tabella di dati di esempio sopra ha tre campi.
-
L'ID campo è un campo AutoNumber con numeri ID univoci. Il tipo AutoNumber è selezionato per nostra comodità. In entrambi i casi, tutti i record nella tabella devono avere un valore ID univoco. Se è numerico, dovrebbe essere convertito in tipo stringa, prima di aggiungerlo al controllo TreeView.
-
Il secondo campo è Descrizione del nodo (Desc ). Le righe di informazioni su questa Colonna sono logicamente correlate.
-
Il terzo ID genitore il campo è Tipo numerico. Ma dovrebbero essere convertiti in Tipo stringa prima di usarlo su TreeView Control.
Dobbiamo sapere in che modo i valori della colonna della descrizione sono correlati tra loro, in base a ciò possiamo stabilire la relazione inserendo i valori correlati nel ParentID campo.
Ad esempio la disposizione logica del rapporto tra Autore di Libri, Editori di Libri, Librerie in cui i Libri sono in Vendita, o come Relazione tra i membri di un Albero genealogico.
Relazione tra categoria di prodotti, prodotti, scorte, prezzo e così via. Tutte queste informazioni potrebbero non essere visualizzate in una colonna in una singola tabella. Possono apparire in colonne diverse o anche in tabelle diverse.
Il ID genitore campo è molto importante in quanto determina la disposizione gerarchica dei nodi. Se il campo ParentID è vuoto, quel record dovrebbe essere un nodo a livello di radice. Il nodo figlio deve sempre avere il proprio ParentID compilato con il valore ID record padre.
Il nodo di livello radice può avere uno o più nodi figlio, il nodo figlio può avere i propri nodi figlio.
Caricheremo i dati sopra in un controllo TreeView e vedremo come appare. Quindi riempiremo il ParentId campo con relativo ID s per cambiare la vista, nel modo in cui vogliamo vederla in un ordine logico.
D. File della libreria dei controlli comuni di Windows .
-
Ma, per prima cosa, apri uno dei tuoi database o creane uno nuovo.
-
Apri la finestra VBA (ALT+F11 ) e seleziona Riferimenti... da Strumenti Menù.
-
Cerca il file:Controlli comuni di Microsoft Windows nell'elenco di file visualizzato e metti un segno di spunta per selezionarlo.
Se non riesci a trovare il file nell'elenco, fai clic su Sfoglia... Pulsante e trova il file:MSCOMLIB.OCX nella directory di sistema di Windows, per la versione di Windows 7 cerca il file in SysWOW64 cartella. Fai clic su OK per chiudere il controllo dell'elenco dei file della libreria.
-
Creare una tabella con la seguente struttura:
-
Salva la tabella con il nome Campione .
-
Riempi la tabella con i dati di esempio di 12 record come mostrato nell'immagine di visualizzazione dati sopra.
E. Creazione del controllo TreeView su modulo
-
Crea un nuovo modulo vuoto.
-
Fai clic su Controlli Activex pulsante dai Controlli Gruppo, trova il controllo Microsoft TreeView quindi selezionalo.
-
Fai clic su OK per inserire un controllo TreeView nel form.
-
Trascina il controllo in basso ea destra per lasciare dello spazio in alto ea sinistra del controllo TreeView. Trascina la maniglia di ridimensionamento dell'angolo in basso a destra verso l'angolo in basso a destra e in basso per ingrandire il controllo, come nell'immagine di esempio riportata di seguito.
-
Visualizza la scheda delle proprietà del controllo e modificane il Nome Valore della proprietà su TreeView0, se è diverso lì.
-
Visualizza la finestra di modifica VBA del modulo.
- Copia e incolla il seguente codice VBA nel modulo sovrascrivendo lì le righe di codice esistenti:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Salva il modulo con il nome frmSample, ma non chiudere la finestra VBA.
G. Codice VBA riga per riga.
F. Accedi al codice VBA.
Diamo una rapida occhiata al codice VBA e capiamo cosa fa.
Nell'Area Dichiarazione Globale, del Modulo Modulo, la Variabile tv dichiarato come TreeView Oggetto. Il KeyPrfx dichiarato come Costante , con il valore del tipo di stringa "X".
Il nodo TreeView Il valore-chiave di 's deve essere sempre di tipo stringa e necessita di almeno un carattere non numerico presente nella chiave del nodo. I nostri valori chiave della tabella di esempio sono tutti in forma numerica, possiamo convertirli e aggiungerli al valore costante "X ”. Il valore numerico convertito in tipo stringa da solo non accetterà come chiave di nodo.
Nota: Se la Node-Key e Chiave genitore i valori sono già in forma alfa o alfa-numerica, quindi la questione della conversione non si pone. Tutti i valori della chiave del nodo devono essere univoci.
Nel Carica_modulo() Event Procedure, vengono dichiarati gli oggetti Database e Recordset. Vengono inoltre dichiarate quattro variabili stringa.
L'istruzione Set tv =Me.TreeView0.Object assegna, il TreeView0 Oggetto nel modulo, nella variabile oggetto tv.
L'istruzione OpenRecordset() apre l'Esempio Record di tabelle che utilizzano SQL strSQL.
Il Fai mentre... assicura che il recordset non sia vuoto, se vuoto esci dal Ciclo e termina il programma.
Se sono presenti record, allora ParentId del primo record il campo viene verificato per la presenza di un valore o meno.
Se è vuoto, il record è per il nodo a livello di radice del controllo TreeView elemento. Il nodo di livello radice necessita solo della Node-Key univoca Valore, che abbiamo già nell'ID Campo e elemento Descrizione Valore del campo per Testo Argomento.
Se il ID genitore il campo ha un valore, quindi il record è un Child-Node (Figlio del nodo di livello radice o figlio di un nodo figlio di livello superiore) dell'oggetto TreeView.
La riga successiva crea la Chiave Valore dell'argomento in nodKey Variabile stringa, con l'ID campo Valore, convertito in String e aggiunto al prefisso costante X, Node-Key diventa X1 .
Il primo!Desc valore del campo aggiunto alla variabile stringa strText, semplicemente per chiarezza e per farla breve in Nodes.Add() nell'elenco dei parametri del metodo, se il riferimento al campo è molto lungo, ciò manterrà il metodo Add() pulito e ordinato.
La prossima riga eseguibile:tv.Node.Add() chiama il metodo Add() di TreeView.Nodes Oggetto per aggiungere il nodo a TreeView0 controllo sul modulo frmSample .
La Sintassi del metodo Add() è riportato di seguito come riferimento:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Tutti e sei i parametri di Add() metodo sono facoltativi. Se chiami questo metodo senza alcun parametro, allora un nodo a livello di radice vuoto verrà aggiunto e una linea ad albero vuota apparirà come indicatore nel controllo TreeView.
Per TreeView Root Nodo di livello richiede la Chiave e Testo Valori argomento.
Per i nodi figlio, entrambi [Relativo] e [Relazione] Sono necessari argomenti. L'omissione di uno qualsiasi di essi inserirà il Nodo come Nodo Radice, ma non genererà alcun errore.
[Relativo] è il NodKey di un nodo esistente, inserito nel ParentID del record correlato campo. [Relazione] è un costante tvwChild con valore numerico 4, identificandolo come un nodo figlio di Key- Valore in ParentID Campo.
L'altra Costante i valori per l'argomento di relazione vengono utilizzati per posizionare i nodi figlio in una posizione specifica. I valori costanti sono i seguenti:
tvwFirst =0, lo pone come primo Nodo, a livello del relativo Nodo.
tvwLast =1, pone come ultimo Nodo, a livello del relativo Nodo.
tvwNext =2, posiziona il Nodo dopo un Nodo specificato.
tvwPrecedente =3, posiziona il Nodo immediatamente prima del Nodo specificato.
Nota: Puoi sperimentare impostando ogni Valore nella Relazione Argomenta ed esegui il codice in modalità debug, dopo aver mantenuto la finestra VBA e il modulo in visualizzazione normale affiancati. Guarda come vengono organizzati i nodi in ogni ciclo di esecuzione del codice per capire.
Questi saranno utili durante la modifica del controllo TreeView eliminando un elemento e inserendo un altro elemento al suo posto o aggiungendo un nuovo nodo in una posizione specifica.
Un nodo con chiave [Relativa] deve esistere nella Nodes Collection prima di tentare di aggiungere un nodo figlio a quel nodo, altrimenti il metodo Add() genera un errore.
Questo processo viene ripetuto finché tutti i record non vengono elaborati nel recordset.
Nota: Puoi rivedere il codice VBA di nuovo dopo le esecuzioni demo.
H. La prima prova.
Apri il modulo in visualizzazione normale. Il risultato dell'esecuzione di prova sarà simile all'immagine riportata di seguito.
Non sembra più di una normale Listbox. Ricorda che non abbiamo inserito alcun valore in ParentID campo nel nostro campione Tavolo. Dobbiamo stabilire una relazione tra gli elementi nelle righe del record per spostarli e posizionarli in un ordine gerarchico nel controllo TreeView.
I. Comprendere la relazione tra i record.
- Apri la Tabella dei campioni ed esaminiamo i Registri e come sono correlati.
- Lasciamo il Database elemento da solo come elemento radice.
L'oggetto Database ha anche alcuni oggetti di primo livello:Applicazione, DBEngine, Raccolta di spazi di lavoro e Raccolta di database , che abbiamo omesso qui.
- Poi abbiamo le Tabelle gruppo Articolo con ID valore 2.
- La prossima Tabella , Campi, Campo gli elementi sono correlati alle Tabelle gruppo. Vogliamo la Tabella Campi e Campo elementi da allineare sotto l'elemento principale Tabelle Record di gruppo con valore ID 2.
- Chiamiamo il record Tabelle come Nodo padre , Tabella, Campi e Record di campi come Nodi secondari .
J. Aggiornamento del campo ParentID.
- Quindi dobbiamo aggiornare il valore 2 (Nodo-Chiave di Tabelle ) nel parentID campo della Tabella , Campi e Campo record.
- Aggiorna solo quei record e chiudi la tabella. Al termine, i record assomiglieranno all'immagine riportata di seguito:
-
Ora apri il tuo frmSample in Visualizzazione modulo e controlla il controllo TreeView. Il risultato sarà simile a quello precedente senza alcuna modifica. Le modifiche sono già avvenute ma non sono visibili a te.
K. La finestra delle proprietà di TreeView Control.
- Ruota il frmSample in Visualizzazione Progettazione.
- Fai clic con il pulsante destro del mouse sul controllo TreeView ed evidenzia TreeCtrl_Object dal Menu di scelta rapida e seleziona Proprietà .
La scheda delle proprietà sarà simile all'immagine riportata di seguito:
- Cambia lo Stile di linea Proprietà Valore =1 (tvwRootLines) e fai clic su Applica quindi fare clic su OK per chiudere la finestra delle proprietà.
L. Esegui dopo LineStyle Modifica del valore della proprietà
- Salva il modulo e aprilo in Visualizzazione normale. Ora, le linee degli alberi vengono visualizzate correttamente. Le Tabelle Il nodo ha un vantaggio (+ ) segno sul lato sinistro, indicando che questo nodo ha uno o più nodi figlio nel livello successivo e non sono in forma espansa.
- Fare clic sul simbolo più per espandere il nodo e visualizzare i nodi figlio, con lo stesso ParentID. Quando si fa clic sul simbolo meno, i nodi figlio vengono compressi e nascosti, cambiando nuovamente il simbolo in un segno più.
- Il display apparirà come la seguente immagine una volta espanso:
M. ID genitore Aggiornamento di altri record.
Aggiorneremo i Moduli registrare ID Value (Node-Key Value) in Form, Controlli, e Controllo ParentID dei record campi in modo che questi record vengano elencati sotto i Moduli Nodo come i suoi Nodi secondari .
Allo stesso modo, aggiorna il campo ParentID di Report e Controlli record con Rapporti ID (Node-Key Value) Valore in modo che Report e Controlli gli elementi verranno posizionati sotto il nodo padre Rapporti , poiché sono Nodi secondari .
-
Apporta modifiche ai record della tabella di esempio con i valori ParentID come mostrato di seguito:
Dopo le modifiche di cui sopra, il display TreeView apparirà come l'immagine seguente, quando tutti i nodi sono in forma espansa.
Tutti i nodi figlio relativi ai nodi di livello principale:le tabelle, i moduli e i rapporti sono raggruppati in un elenco sotto i nodi principali. Ma un nodo figlio può avere un nodo padre, un nodo nonno o un nodo bisnonno.
N. Disporre tutti gli oggetti in ordine gerarchico logico.
Ad esempio, prendiamo il primo nodo a livello radice Tabelle . Logicamente Campo (con ID record 5) è direttamente correlato ai Campi raccolta (ID record 4), i Campi raccolta relativa a Tabella e Tabella fa parte di Tabelle collezione. Ogni elemento del gruppo (record da 5 a 2) è correlato di un gradino al livello successivo.
Quindi posizioniamo correttamente questi nodi figlio sotto il loro nodo padre e vediamo come appare.
-
Apri la tabella di esempio e modifica i valori ParentID delle Tabelle relativi ai record figlio come mostrato di seguito:
- Il Campo con Il padre del record ID-5 è Campi, record con ID-4, quindi abbiamo aggiornato il campo ParentID del 5° record con ID Number 4.
- Allo stesso modo, il campo ParentID del 4° record viene aggiornato con 3 e il ParentID del 3° record viene aggiornato con il record numero 2.
-
Nota: Non dare per scontato che gli elementi disposti in questo modo debbano essere uno accanto all'altro.
- Dopo le modifiche ai record, salva la tabella e apri frmSample per visualizzare le modifiche. Il tuo display TreeView dovrebbe assomigliare all'immagine fornita di seguito, con tutti i nodi in forma espansa.
Il controllo TreeView ha il proprio foglio delle proprietà e le impostazioni ne influenzano l'aspetto. Quindi faremo una modifica in una delle sue proprietà e torneremo a visualizzare nuovamente TreeView.
Le impostazioni in questo foglio delle proprietà cambiano l'aspetto della visualizzazione TreeView.
Lo Stile della proprietà in alto a sinistra è già impostato con il numero massimo di funzioni disponibili Opzione-7 (tvwTreeLinesPlusMinusPictureText).
Il nodo figlio di un nodo a livello radice può essere un nodo padre per il proprio figlio o per i propri figli. In questo modo può fare diversi gradini lungo l'albero.
Modifica gli altri due gruppi di ParentID di Child Node i valori dei campi in modo che assomiglino all'immagine data sopra.
OGGETTO DIZIONARIO
- Nozioni di base sugli oggetti del dizionario
- Nozioni di base sugli oggetti del dizionario-2
- Ordinamento delle chiavi e degli elementi degli oggetti del dizionario
- Visualizza record dal dizionario
- Aggiungi oggetti classe come elementi del dizionario
- Aggiorna l'elemento del dizionario degli oggetti della classe