Newsgroup: it.comp.appl.access
Titolo: Nelle maschere, esiste un metodo per gestire la tabulazione non automatica?

Salve a tutti..
Forse Vi sarà capitato più di una volta che la tabulazione automatica 
(Strumenti > Opzioni > Tastiera > Con Invio passa a: 1: nessuno spostamento 
2: campo successivo 3: record successivo) Vi abbia creato non pochi 
grattacapi quando la convalida di un campo dovesse essere gestita a livello 
di codice, perchè la regola di convalida nelle proprietà del controllo non 
permetteva certi tipi di verifiche.
Nel caso difatti la regola di convalida avesse dato esito negativo per un 
qualsiasi campo, bisognava inventarsi (almeno parlando per me) 
stratosferiche strutture di eventi LostFocus, GotFocus e metodo Setfocus, 
per ogni controllo o qualsiasi altro oggetto di maschera che potesse essere 
puntato dal mouse o selezionato da tastiera, e questo per stare leggeri. Vai 
tranquillo poi che tutto non ancora funzionava come nei presupposti.
Come già qualcuno avrà sicuramente provato, se l'opzione scelta per l'invio 
è "campo successivo" (predefinita e usata da quasi tutti) e se la convalida 
via codice restituisce esito negativo, il far restare il cursore all'interno 
del controllo richiede non poco dispendio. Certo, si disabilitano tutti i 
controlli che non c'entrano (così il cursore resta all'interno del 
controllo) e poi si gestisce l'abilitazione e disabilitazione per tutti i 
controlli man mano che si inseriscono i dati, costruendo una sorta di 
"percorso obbligato". A volte però questo non sempre è possibile, può 
diventare una martoriazione per l'utente per svariati motivi (o perchè deve 
modificare un dato già disabilitato, o per qualsiasi altro voglia motivo) e 
la gestione della cosa diventa ad un certo punto pesante fino a scappare di 
mano.
Io ho adottato un sistema che abilita e disabilita da codice il passaggio o 
meno al campo successivo con le funzioni (che già qualcuno conoscerà):
Function Blocca_Cursore()
Application.SetOption "Move After Enter", 0
End Function
Function Sblocca_Cursore()
Application.SetOption "Move After Enter", 1
End Function
e una funzione, che se a qualcuno può interessare, accetta in ingresso un 
controllo e sposta il focus al controllo successivo, gestendo, se il 
controllo è l'ultimo in ordine di tabulazione, la ripartenza dal primo.
La mia domanda è:
qualcuno di Voi adotta soluzioni moooooolto più semplici di questa o tutto 
l'ambaradan che ho scritto può veramente interessare a qualcuno ( e in 
questo caso faccio pervenire il tutto al Sito Comune)?
Cordiali saluti 

Michele (Giò) ha scritto:

Scusa ma io gestisco in altro modo la validazione dati, quindi non mi
è chiarissimo.
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=157
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=156
In ogni caso perchè nel tuo sistema non sfrutti
Screen.PrevousControl.SetFocus...
in caso di errore nel DataEntry....?
@Alex

 ha scritto nel messaggio 
news:44fb3cae$0$35074$4faf...@reader4.news.tin.it...

Io faccio la validazione prima della scrittura dei dati...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Eh si Sergio, è proprio vero.... certa gente ama complicarsi la vita quando, 
vuoi per il caso o per la superficialità, non dà subito un significato a 
quel (Cancel as Integer) che si trova sull'evento BeforeUpdate. Adesso che 
ho dato un significato a quella variabile, mi rendo conto di aver penato un 
anno per niente...... Non si è nati maestri e c'è sempre da imparare.
Ho provato a giocare un pò con il Cancel, e devo dire che con un pò di 
ricami mi può fornire lo stesso servizio della parapiglia che ho scritto.... 
beh dai, mi consolo con il fatto che comunque una via d'uscita l'avevo 
trovata lo stesso....
Saluti
Michele

 Michele
Ciao.
-- 
Sergio MAZZA