logo MC2 E-Learning S.a r.l.
Logo Einstein grigio sfumato
e = m x c al quadrato





Come gestire i passaggi in una maschera a pių pagine

Impariamo come gestire i passaggi in una maschera di Access a pių pagine con il VBA Visual Basic for Application







In un altro tutorial, abbiamo imparato a creare una maschera a più pagine per risolvere il problema della presentazione di più dati di quanti non ce ne possano stare nella “pagina” di una maschera sullo schermo del computer.

Abbiamo anche imparato come gestire semplici passaggi da una pagina all’altra impostando su Current Page (Pagina corrente) la proprietà Cycle (Sequenza) di una maschera.

Uno degli inconvenienti di questa soluzione sta nel fatto che l’utente non può più usare i tasti Tab o Maiusc-Tab per passare ad altre pagine o ad altri record. Per farlo, bisogna usare i tasti PagSu e PagGiù o i pulsanti di selezione dei record.

Si può impostare Sequenza su Tutti i record per dare di nuovo questa possibilità all’utente, però capitano strane cose se non si aggiunge un po’ di codice di programma per gestire l’allineamento delle pagine.

Per vedere che cosa succede, aprire frmAutoriTabErrato nel database Libri dalla finestra Database.

Portarsi sull’ultimo record usando i tasti di selezione dei record e premere PgGiù per passare al campo Bio dell’ultimo autore.

Successivamente, premere Maiusc-Tab (tabulazione a ritroso) una sola volta. Lo schermo dovrebbe a questo punto presentarsi come nella figura (figura 1).
 
Se si lascia la proprietà Sequenza su Tutti i record o su Record corrente, Io spostamento col tasto Tab attraverso i confini delle pagine provoca disallineamenti, a meno che non si aggiunga un po’ di codice per rimediare all’inconveniente.

Quel che succede è che Access sposta la visualizzazione della maschera giusto di quel tanto che basta per mostrare il controllo sul quale ci si è appena portati col tasto Tab.

(In questo caso, si sta facendo Tab sul controllo sottomaschera fsubLibriAutore.)

Per consentire lo spostamento col tasto Tab attraverso i confini di una pagina, garantendo al tempo stesso un corretto allineamento della pagina, occorre unaroutine evento nell’evento INVIO (Enter) del primo e dell’ultimo controllo di ciascuna pagina che può ricevere il focus.

In questo caso, la seconda pagina della maschera frmAuthors ha un solo controllo che possa ricevere il focus (Bio), per cui si troveranno tre routine evento definite nel modulo di questa maschera. Eccole qui:

Private Sub AuthorID_Enter()
     ' Il comando GoToPage che segue riallinea la pagina quando
     ' si fa tab in avanti dal record precedente.
     ' Non ha effetti in altri casi.
      Me.GoToPage 1
End Sub

Private Sub Bio_Enter()
     ' Il comando GoToPage che segue riallinea la pagina quando
     ' si fa tab a ritroso dal record successivo.  Viene attivato anche
     ' quando si preme PagGiù nel controllo sottomaschera
     ' nella pagina precedente. L'evento TastoGiù (KeyDown)
     'mette il focus qui e questo allinea la pagina correttamente   
      Me.GoToPage 2
End Sub

Private Sub fsubAuthorBooks_Enter()
      On Error Resume Next    
      ' Se si fa tab in fsubAuthorBooks dal controllo "Bio"    
      If Screen.PreviousControl.Name = "Bio" Then
 
           ' Esegue qualcosa di contorto per allineare
           ' correttamente la pagina
           Application.Echo False
           Me!AuthorID.SetFocus
           Me.GoToPage 1  
           Me!fsubAuthorBooks.SetFocus
           Application.Echo True
       End If
End Sub

Si può mettere alla prova questo codice aprendo la maschera frmAuthors per visualizzare più record e quindi muovendosi un po’ col tasto Tab.

Ricordiamo che per tabularsi fuori da un controllo sottomaschera bisogna tenere schiacciato il tasto Ctrl mentre si preme o Tab (in avanti) o Maiusc-Tab (a ritroso).

Come si può vedere, il codice per le caselle di testo AuthorlD e Bio è davvero molto semplice. Nel caso di AuthorlD, non importa da quale direzione si viene: bisogna soltanto assicurarsi che la maschera sia impostata in cima a pagina i usando sulla maschera stessa il metodo GoToPage.

Per Bio, dal momento che è l’unico controllo sulla pagina che possa ricevere il focus, un semplice GoToPage è già abbastanza.

Il controllo fsubAuthorBooks è un’altra faccenda. In primo luogo, trattandosi di uncontrollo sottomaschera, il focus è di fatto sulla maschera interna al controllo, per cui il ricorso al metodo GoToPage provocherebbe un errore.

Bisogna disattivare la rigenerazione dello schermo, spostare il focus su un controllo a pagina 1 della maschera principale (siccome questo lo si fa con un codice, spostarsi su un controllo non fa scattare l’evento INVIO per quel controllo), allineare su pagina 1 e quindirimettere il focus sulla sottomaschera.

Questo è un bel po’ di lavoro se ci si trova già sulla pagina 1, per cui c’è anche un test per vedere se, in effetti, ci si è già spostati con la tabulazione su fsubAuthorBooks arrivando dal controllo Bio di pagina 2: un’ottima occasione per sfruttare laproprietà PreviousControl dell’oggetto Screen.

Soltanto se si è fatto Tab da pagina 2 si deve ricorrere ai contorcimenti descritti prima per allinearsi su pagina 1.




Esempi di accesso ai dati con VBA Microsoft Access

Tutorials su Microsoft Access




Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html


Cerca sul web con Google:


Google