Access
 sql >> Database >  >> RDS >> Access

Creazione del menu di accesso con il controllo della visualizzazione ad albero

Il menu del progetto di Microsoft Access, una volta terminato con il controllo della visualizzazione ad albero, sarà simile all'immagine riportata di seguito.

L'immagine sopra mostra la terza opzione del gruppo di rapporti Rapporto personalizzato è selezionato ed evidenziato, con il Modulo parametro filtro report aperto, sovrapposto alla schermata del menu, per l'input dell'utente.

Prima di approfondire, nella lezione della scorsa settimana, abbiamo imparato come organizzare gli elementi correlati in ordine gerarchico, utilizzando Microsoft Tree View Control, basato sull'Esempio tabella dati.

La scorsa settimana ho sottolineato che gli elementi correlati nei dati del controllo Tree View non devono necessariamente essere uno accanto all'altro. Dopo questo, ti sarà più chiaro come aggiornare Relativo Chiavi dei nodi figlio, indipendentemente dalla posizione fisica dei record nella tabella, ma in base alla relazione con i relativi ID nodo padre.

Questa era la tabella dati che abbiamo utilizzato e terminato con l'esercizio della scorsa settimana:

Puoi aggiungere il seguente elenco di elementi alla fine della tabella sopra e aggiornare i valori del campo ParentID in modo che la visualizzazione TreeView assomigli all'immagine di esempio fornita di seguito:

Nuovi record per Tabella campo relativo al record dell'articolo :

  1. Campo di testo.
  2. Campo numerico.
  3. Campo data/ora.
  4. Campo collegamento ipertestuale.

Modulo Controlli: correlati

  1. Casella di testo.
  2. Pulsanti di comando.
  3. Casella combinata.
  4. Casella di riepilogo.

Segnala Controlli: correlati

  1. Casella di testo.
  2. Etichetta.
  3. Grafico grafico.

Assegna i valori ParentID a questi elementi in modo che la visualizzazione della visualizzazione ad albero assomigli alla seguente immagine:

Ora procederemo con la creazione di un menu di progetto MS-Access e impareremo cosa serve per crearne uno. Di seguito è riportata una semplice immagine del menu:


È un menu semplice con solo tre gruppi di opzioni:Moduli, Visualizzazioni report e Macro.

In Moduli Vengono fornite due opzioni di gruppo, la prima mostra il record della tabella dei menu dei controlli della vista ad albero. La seconda opzione mostra gli stessi record in modalità modulo continuo.

La prima opzione in Vista rapporto visualizza un rapporto sui prodotti Categoria record, dalla tabella delle categorie di NorthWind.accdb banca dati.

La seconda opzione visualizza il rapporto prezzo di listino prodotti.

Il terzo l'opzione apre un Parametro Modulo in modo che l'Utente possa impostare il Min imum e Max Intervallo massimo di valori List-Price, per Filtrare i dati per il Report List-Price prodotti.

Sotto i Processi Macro Gruppo, entrambe le opzioni eseguono Macro1 e Macro2 rispettivamente e visualizzare messaggi diversi.

Abbiamo bisogno di una tabella dei menu con i record delle opzioni precedenti con alcuni campi aggiuntivi, oltre ai soliti campi di dati ID univoci, Descrizione e ParentID di TreeView. L'immagine della tabella dei menu è riportata di seguito:

Crea una tabella con la struttura sopra, aggiungi i record sopra e salvala con il nome Menu . L'ID il campo è AutoNumber, PID, e Digita i campi sono numerici, gli altri sono campi di testo.

Conosciamo i primi tre campi dati:l'ID univoco , Descrizione, e il ID genitore Campi. Qui, ho abbreviato il nome del campo ParentID in PID .

Abbiamo bisogno di altri quattro campi nella tabella dei menu, un campo Tipo per il tipo di oggetto Codice e tre campi Modulo , Segnala, e Macro .

Digita Il campo contiene i codici numerici del tipo di oggetto di accesso per identificare l'opzione su cui l'utente ha fatto clic.

  • Il campo Modulo è per Nomi modulo oggetto Digitare il codice 1,
  • Il campo del rapporto contiene Nomi del rapporto oggetto Digitare il codice 2,
  • Campo macro è per Nomi macro, codice del tipo di oggetto 3.

Nota: Tutti i nomi degli oggetti possono essere inseriti in una colonna. Abbiamo usato campi separati solo per chiarezza. In tal caso, apportare modifiche al codice VBA, ovunque faccia riferimento a nomi di campo diversi.

In base ai numeri di codice possiamo prelevare i nomi degli oggetti, dai rispettivi campi e chiamare il DoCmd.Openform o Docmd.OpenReport o Docmd.RunMacro per eseguire l'azione sui clic del nodo figlio.

Ora, dobbiamo memorizzare il codice del tipo e il nome dell'oggetto sui nodi figlio. Affronteremo questo argomento quando inizieremo ad aggiungere i nodi al controllo Tree View.

Abbiamo bisogno di altre due tabelle di dati per moduli e report di esempio. Le Categorie Tabella e Prodotti Tabelle, da NorthWind.accdb database di esempio. Per risparmiare tempo ho allegato il Demo Database con tutti gli Oggetti e Programmi alla fine di questa Pagina per Scaricarlo e provarlo.

Creare due moduli utilizzando la tabella dei menu con i nomi Data Entry e un altro modulo Visualizzazione dati in continuo Modalità modulo.

Crea due rapporti, uno nella tabella delle categorie con il nome del rapporto:Categorie un altro rapporto sulla tabella prodotti con il nome Elenco prodotti . Aggiungi un'etichetta lunga controlla sotto l'intestazione principale del rapporto sull'elenco dei prodotti e modifica il valore della proprietà del nome in Intervallo .

Crea un piccolo modulo con due caselle di testo non associate e cambia il loro nome Valore proprietà in Min &Massimo, come il design indicato di seguito:

Aggiungi due pulsanti di comando come mostrato sopra. Modifica la Didascalia Valore della proprietà del primo pulsante per Aprire il rapporto t e il Nome Valore della proprietà su cmdReport .

Modifica la didascalia del secondo pulsante di comando in Annulla e il Nome Valore della proprietà su cmdCancel .

Visualizza il Modulo Codice del Modulo. Copia e incolla il seguente codice nel modulo modulo e salva il modulo:

Sub privato cmdOpen_Click()Dim mn, mx, fltr As Stringmn =Nz(Me![Min], 0)mx =Nz(Me![Max], 9999)If (mn + mx)> 0 Then fltr ="[Prezzo di listino]> " &mn &" And " &"[Prezzo di listino] <=" &mx DoCmd.OpenReport "Elenco prodotti", acViewReport, , fltr, , fltrElse DoCmd.OpenReport "Elenco prodotti", acViewReportEnd IfEnd SubPrivate Sub cmdCancel_Click()DoCmd.CloseEnd Sub

Quando l'utente imposta un intervallo di valori immettendo l'intervallo di prezzo di listino minimo e massimo nelle rispettive caselle di testo, viene creata la stringa dei criteri del filtro report. Il Filtro rapporti Il valore della stringa viene passato alla Elenco di prodotto Segnala come parametro di comando Apri Report. Il valore Filter String viene anche passato come OpenArgs (Argomento aperto) Parametro.

Il parametro Filter filtra i dati del report, in base ai criteri, specificati nei campi Min e Max, e il valore dell'argomento aperto viene copiato nell'Intervallo Didascalia etichetta quando il rapporto è aperto.

Copia e incolla il seguente codice nell'Elenco prodotti Modulo VBA di Report:

Private Sub Report_Open(Cancel As Integer) DoCmd.Close acForm, "Parameter" Me.Range.Caption =Nz(Me.OpenArgs, "")End Sub
  1. Crea un nuovo modulo, con il nome frmMenu, e aggiungi il controllo Microsoft TreeView dall'elenco dei controlli Activex. Ridimensiona il controllo come mostrato nella vista Progettazione qui sotto:

  2. Modifica il nome del controllo della visualizzazione ad albero in TreeView0 nella normale scheda delle proprietà.

  3. Aggiungi un pulsante di comando sotto il controllo Visualizzazione ad albero. Cambia il suo Nome Valore della proprietà su cmdExit e Didascalia Valore della proprietà da Esci .

  4. Fare clic con il pulsante destro del mouse sul controllo della visualizzazione ad albero ed evidenziare TreeCtrl_Object opzione e seleziona Proprietà per visualizzare la finestra delle proprietà.

  5. Modifica i seguenti valori di proprietà come indicato di seguito:

  • Stile =7 (tvwTreeLinesPlusMinusPictureText)
  • Stile linea =1 (tvwRootLines)
  • LabelEdit =1 (tvwManual)

La scorsa settimana abbiamo cambiato i primi due valori di proprietà. Quando LabelEdit Il valore predefinito della proprietà è 0 - tvwAutomatico, Cliccando due volte sul Nodo (non facendo doppio clic) il Node-Text andrà in Modalità Modifica e potrai cambiare il Testo. Ma non aggiornerà direttamente il campo dell'origine dati. Modificandolo in 1 – tvwManual impedirà che entri in modalità di modifica.

Possiamo modificarlo tramite il codice aggiungendo le seguenti righe nella procedura dell'evento Form_Load():

Con Me.TreeView0.Object .Style =tvwTreelinesPlusMinusPictureText .LineStyle =tvwRootLines .LabelEdit =tvwManualEnd With

La scorsa settimana abbiamo utilizzato Form_Load() Evento Procedura per leggere i valori del nodo di visualizzazione albero per creare i nodi a livello radice e figlio. Abbiamo bisogno della stessa Procedura anche qui con poche righe di Codice aggiuntivo.

Oltre a ciò, dobbiamo intercettare il Node_Click() Evento di Nodi per verificare quale Opzione l'Utente ha selezionato.

Copia e incolla il seguente codice VBA nel modulo modulo e salva il modulo.

Opzione Confronta DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewConst KeyPrfx As String ="X"Private Sub Form_Load()Dim db As DatabaseDim rst As RecordsetDim nodKey As StringDim PKey As StringDim strText As StringDim strSQL As StringDim tmpNod As MSComctlLib.NodeDim Typ As VariantSet tv =Me.TreeView0.Objecttv.Nodes.Clear

'Modifica le proprietà del controllo TreeView

Con tv
.Style =tvwTreelinesPlusMinusPictureText
.LineStyle =tvwRootLines
.LabelEdit =tvwManual
.Font.Name ="Verdana"
Termina con

strSQL ="SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;"Set db =CurrentDbSet rst =db.OpenRecordset(strSQL, dbOpenDynaset)Do While Not rst.EOF And Not rst.BOF If Nz(rst) !PID, "") ="" Quindi nodKey =KeyPrfx &CStr(rst!ID) strText =rst!Desc Set tmpNod =tv.Nodes.Add(, , nodKey, strText) 'Nodo a livello di radice Descrizione in grassetto Con tmpNod .Bold =True End With Else PKey =KeyPrfx &CStr(rst!PID) nodKey =KeyPrfx &CStr(rst!ID) strText =rst!Desc Set tmpNod =tv.Nodes.Add(PKey, tvwChild, nodKey, strText) 'Verifica la presenza di Type Code If Nz(rst!Type, 0)> 0 Then Typ =rst!Type Seleziona Case Typ Case 1 'salva tipo Code &Form Name in Node Tag Property tmpNod.Tag =Typ &rst!Form Caso 2 'Salva il tipo Codice e nome del rapporto nella proprietà tag del nodo tmpNod.Tag =Typ &rst!Report Caso 3 ' salva tipo Codice e nome macro nella proprietà tag del nodo tmpNod.Tag =Typ &rst!Macro End Seleziona End If End If rst.MoveNextLooprst.CloseSet rst =NothingSet db =NothingEnd SubPrivate Sub cmdExit_Click()If MsgBox("Chiudi modulo menu? ", vbYesNo, "cmdExit_Click()") =vbYes Then DoCmd.CloseEnd IfEnd SubPrivate Sub TreeView0_NodeClick(ByVal Node As Object)Dim varTag, typeid As IntegerDim objName As String, nodOn as MSComctlLib.NodeIf Node.Expanded =False Then Node.Expanded =TrueElse Node.Expanded =FalseEnd Se

'Reimposta la spia precedente su normale

Per ogni nodOn In tv.Nodes
nodOn.BackColor =vbWhite
nodOn.ForeColor =vbBlack
Next

'cambia BackColor in Azzurro e ForeColor White

tv.Nodes.Item(Node.Key).BackColor =RGB(0, 143, 255)
tv.Nodes.Item(Node.Key).ForeColor =vbWhite

'—Evidenzia il codice termina-

varTag =Nz(Node.Tag, "")If Len(varTag)> 0 Then typeid =Val(varTag) objName =Mid(varTag, 2)End IfSelect Case typeid Case 1 DoCmd.OpenForm objName, acNormal Case 2 DoCmd.OpenReport objName, acViewPreview Caso 3 DoCmd.RunMacro objNameEnd SelectEnd Sub

Nell'area di dichiarazione globale del modulo viene dichiarato l'oggetto Tree View. Una variabile costante KeyPrfx è dichiarato con il valore “X”.

Il Carica_modulo() Evento Procedura dell'articolo della scorsa settimana che abbiamo modificato con codice aggiuntivo. Ho commentato il nuovo segmento del Codice per dare un'indicazione di cosa fa, ma spiegherò cosa fa.

La procedura dichiara Database, Recordset e quattro variabili stringa. Le due righe successive dichiarano un oggetto nodo temporaneo:tmpNod e Digita Le variabili varianti sono dichiarate.

Successivamente, l'oggetto TreeView tv viene assegnato con TreeView0 Oggetto sul modulo. Gli eventuali nodi esistenti di TreeView0 vengono cancellati con l'istruzione:tv.Nodes.Clear , in preparazione per caricare nuovamente tutti i nodi.

Abbiamo implementato il codice seguente per modificare le proprietà del controllo Tree View tramite il codice, anziché tramite il foglio delle proprietà.

Con tv .Style =tvwTreelinesPlusMinusPictureText .LineStyle =tvwRootLines .LabelEdit =tvwManual .Font.Name ="Verdana"Finisci con 

Il carattere della vista ad albero è cambiato in Verdana. Oltre a ciò, introdurremo altre funzioni come espandere o comprimere tutti i gruppi di menu con un clic, anziché espandere o comprimere manualmente un gruppo dopo l'altro.

La nuova stringa SQL è stata modificata per aggiungere i nuovi campi Tipo di campo, Modulo, Report e Macro dalla tabella dei menu.

Il primo record della tabella dei menu viene verificato per la presenza di qualsiasi valore nel PID campo, se è vuoto, è un record di nodo a livello radice. Viene aggiunto all'oggetto Tree View come nodo di livello radice e il suo riferimento viene salvato nel tmpNod Oggetto.

Il nodo ha diverse proprietà come Forecolor, Bold, e molti altri, abbiamo preso il Bold Proprietà e assegnata Vero per raggiungere il Livello radice Il nodo ha un aspetto diverso dai suoi nodi figlio.

Se non è una voce del nodo principale, allora ha il valore PID, il programma accetta Else clausola e il record viene aggiunto come nodo figlio. Qui controlliamo il Tipo valore del campo. Se contiene uno dei tre valori 1, 2, o 3 quindi dobbiamo prendere il valore da Form, Report o Macro Name insieme a quello il Type Code e unirli insieme (come "1Data Entry" , "Elenco 2Categoria" ecc.) e salvarlo nel Tag Proprietà dei nodi figlio. Abbiamo familiarità con la proprietà tag nei controlli di accesso, come caselle di testo, etichette, pulsanti di comando e altri, ma la usiamo raramente.

Il cmdExit_Click() La procedura chiude il Menu Form se la risposta dell'Utente è affermativa.

Quando l'utente fa clic su un nodo figlio, il valore che abbiamo salvato nel suo Tag La proprietà deve essere estratta e controllata per determinare cosa fare dopo. Per questo, abbiamo bisogno di un TreeView0_NodeClick() Procedura dell'evento.

Private Sub TreeView0_NodeClick(ByVal Node As Object)Dim varTag, typeid As IntegerDim objName As String, nodOn come MSComctlLib.NodeIf Node.Expanded =False Then Node.Expanded =TrueElse Node.Expanded =FalseEnd If

'Reimposta la spia precedente su normale

Per ogni nodOn In tv.Nodes nodOn.BackColor =vbWhite nodOn.ForeColor =vbBlackNext nodOn

'cambia BackColor in azzurro e ForeColor White tv.Nodes.Item(Node.Key).BackColor =RGB(0, 143, 255) tv.Nodes.Item(Node.Key).ForeColor =vbWhite'—Evidenzia il codice finisce- varTag =Nz(Node.Tag, "")If Len(varTag)> 0 Then typeid =Val(varTag) objName =Mid(varTag, 2)End IfSelect Case typeid Case 1 DoCmd.OpenForm objName, acNormal Case 2 DoCmd.OpenReport objName, acViewPreview Caso 3 DoCmd.RunMacro objNameEnd SelectEnd Sub

La procedura evento Click() riceve il Node's Reference cliccato come parametro nell'oggetto Nodo . All'inizio di questa procedura, abbiamo dichiarato alcune variabili.

Le righe successive controllano se il nodo su cui si è fatto clic è in uno stato espanso o compresso.

Normalmente, per espandere un Nodo, per mostrare i suoi Nodi figli nascosti, o clicchiamo su + (simbolo più) sul lato sinistro di un nodo o fare doppio clic sul nodo stesso. Facendo nuovamente doppio clic sul nodo o facendo clic sul - (simbolo meno) si nasconderanno i nodi figlio.

Con il seguente segmento di codice possiamo espandere o comprimere i nodi figlio con un solo clic:

Se Node.Expanded =False Then Node.Expanded =TrueElse Node.Expanded =FalseEnd Se 

Le successive sei righe eseguibili assicurano che il Nodo ricevuto il Click rimanga evidenziato.

'Ripristina l'evidenziazione precedente su Normale

Per ogni nodOn In tv.Nodes nodOn.BackColor =vbWhite nodOn.ForeColor =vbBlackNext nodOn

'Cambia BackColor in Light Blue e ForeColor White tv.Nodes.Item(Node.Key).BackColor =RGB(0, 143, 255) tv.Nodes.Item(Node.Key).ForeColor =vbWhite'—Evidenzia il codice finisce-

Successivamente, il valore della proprietà tag viene letto nel varTag Variabile. Se non è vuoto, il valore viene diviso in due parti. Il valore numerico viene estratto e salvato nel Tipo variabile e la parte Nome oggetto viene salvata nella variabile objName .

A seconda del valore nella variabile Typid, Docmd viene eseguito per aprire il modulo, il report o esegue la macro.

Aggiungeremo altri due pulsanti di comando nella parte superiore del menu. Uno per espandere tutti i nodi con un clic e il secondo per comprimere tutti i nodi.

  1. Aggiungi altri due pulsanti di comando nell'area superiore del controllo della visualizzazione ad albero, come mostrato nel disegno sottostante.
  2. Cambia il Nome Proprietà Valore del pulsante di comando sinistro su cmdExpand e la Didascalia per Espandi tutto .
  3. Allo stesso modo, cambia il Nome del pulsante di comando sul lato destro Proprietà su cmdCollapse e la Didascalia per Comprimi tutto.
  4. Copia e incolla il seguente codice VBA sotto il codice esistente nel frmMenu Modulo modulo e salva il modulo.
Private Sub cmdExpand_Click()Dim Nodexp As MSComctlLib.NodeFor Each Nodexp In tv.Nodes If Nodexp.Expanded =False Then Nodexp.Expanded =True End IfNext NodexpEnd SubPrivate Sub cmdCollapse_Click()Dim Nodexp As MSComctlLib.NodeFor Each Nodexp In tv .Nodes If Nodexp.Expanded =True Then Nodexp.Expanded =False End IfNext NodexpEnd Sub

All'inizio del cmdExpand_Click() Evento, abbiamo dichiarato un oggetto Tree View Node NodExp. Il per . . . Avanti loop prende un nodo alla volta e controlla se è in forma espansa o meno. In caso contrario, è espanso Il valore della proprietà è impostato su True .

Allo stesso modo, il cmdCollapse_Click() L'evento esegue un controllo simile e se è in uno stato espanso, il valore della proprietà espansa viene impostato su False.

Tutti i nodi del controllo di visualizzazione ad albero completo possono essere espansi e rendere visibili tutti i nodi figli contemporaneamente o tutti i nodi figli mantenuti nascosti ad eccezione dei nodi a livello radice.

Spero ti sia piaciuto creare il nuovo Menu per il tuo progetto. Se esegui l'attività di progettazione passo dopo passo, il tuo menu dovrebbe apparire come l'immagine del menu finita fornita in alto.

Nel corso dell'anno 2007 ho disegnato un Menu in uno dei miei Progetti, per Sistema di Contratti di Servizio Veicoli, utilizzando il Controllo Tab con più Pagine. Ogni Pagina che ha 10 o più Opzioni e per far apparire ogni Pagina a turno nella stessa area quando l'utente fa clic sui pulsanti di comando allineati su entrambi i lati del Menu. Anche i pulsanti di comando sul lato destro cambiano, in base alla selezione di il pulsante sul lato sinistro.

Fare clic per ingrandire

Puoi trovare l'articolo Menu Design with Tab Control su questo link:https://www.msaccesstips.com/2007/06/control-screen-menu-design.html


MODULO CLASSE

  1. Modulo di classe MS-Access e VBA
  2. Matrici e oggetti classe VBA MS-Access
  3. Classe base MS-Access e oggetti derivati ​​
  4. Classe base VBA e oggetto derivato-2
  5. Classe base e varianti di oggetti derivati
  6. Recordset MS-Access e modulo di classe
  7. Accedi al modulo di classe e alle classi wrapper
  8. Funzionalità della classe wrapper