Newsgroup: it.comp.appl.access
Titolo: Comportamento Su Click in casella di riepilogo

In una maschera popolo una casella di riepilogo con dati diversi a seconda
dell'uso. In certi casi metto Selezione Multipla a No, in altri a Sì.
Quando però premo FrecciaGiù per posizionarmi sui record successivi al
primo, mi esegue immediatamente la routine dell'evento Su Click, che mi
prende il dato selezionato e lo mette nella casella di controllo di
destinazione. Se con Selezione Multipa a Sì la cosa non dà problemi, me ne
dà quando metto Selezione Multipla a No, perché le routine previste in quei
casi dispongono che la maschera si chiuda e il controllo torni alla maschera
chiamante.
In pratica mi seleziona immediatamente la prima voce dell'elenco.
Selezionando col topo non ho problemi, ma ne ho se uso appunto le frecce
della tastiera.
Nell'help di Access 2000 c'è scritto che l'evento Su Click avviene quando:
...
Si seleziona un elemento di una casella combinata o di una casella di
riepilogo premendo i tasti di direzione, quindi INVIO oppure facendo clic
con il pulsante del mouse.
...
Ora, invece, di premere INVIO non ho proprio il tempo.
Devo cambiare qualche altra caratteristica della casella di riepilogo?
Grazie e saluti.
Riccardo Baldinotti
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:62Z101Z84Z15Y1...@usenet.libero.it...

Fatico a seguire il tuo problema.
Se la casella di riepilogo è a Selezione Multipla, di solito non si genera
alcun codice VBA a fronte dell'evento "Su clic" della casella di riepilogo,
ma si genera il codice VBA a fronte dell'evento "Su clic" di un pulsante di
comando: insomma prima si seleziona le righe con il mouse e poi si effettua
un azione pigiando il pulsante di comando.
O sbaglio?
Comunque, se fai così, sia che la casella di riepilogo è o meno a selezione
multipla, l'azione verrà eseguita a fronte dell'evento "Su clic" del
pulsante di comando.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------


In realtà, le caselle di riepilogo hanno un evento "su click", così come un
evento "dopo aggiornamento". Quest'ultimo avviene, fra l'altro, ogni volta
che si batte un tasto freccia su o giu; l'altro dovrebbe avvenire, come
dicevo, solo dopo che, spostato il cursore, si batte <invio>. Almeno stando
all'help. Tra l'altro, con le caselle combinate avviene proprio così.
Pensavo che la stranezza fosse dovuta a qualcosa nella maschera usata e
allora fatto una prova: ho fatto una maschera, ci ho messo una casella di
riepilogo basata su una tabella, ho messo nell'evento "dopo aggiornamento"
un messaggio e nell'evento "click" un altro messaggio. Ho provato a porre
l'opzione "selezione multipla" nei tre stati possibili.
I risultati:
   con "selezione multipla" = nessuna
entrambi gli eventi accadono ogni volta che premo freccia su o giu
(contrariamente a quello che dovrebbe succedere).
   con "selezione multipla" = semplice
idem con patate (antica espressione di Topolino dei miei tempi...).
   con "selezione multipla" = estesa
oltre alle patate, succede questo: premo <spazio> (producendo i due eventi),
poi posso tenere il tasto <shift> e selezionare con la freccia diversi
record, ma in questo caso non si produce nessuno dei due eventi. Quindi mi
domando come posso spiegare al programma che quei dati selezionati li voglio
proprio ( va be', ce il VBA, ItemsSelected e tutto l'ambaradan, ma allora
gli eventi in casella a che servono?).
L'idea era questa: l'utente apre la maschera e a seconda dei casi:
1. si sposta su un record desiderato, preme <invio> e il valore scelto è
messo nella casella destinazione.
2. seleziona diversi record con <freccia> e <spazio>, al ché aggiorna ogni
volta la casella destinazione con tutti i valori scelti fino a quel momento.
Il primo caso è alternativo a una casella di riepilogo con possibilità di
aggiungere voci non in elenco, soluzione che mi sconquifera meno in quella
situazione.
Mi rendo conto di essere stato prolisso, ma non so come spiegarmi meglio.
Intanto ti ringrazio per la cortesia. "Roberto da casa for president".


 ha scritto nel messaggio
news:62Z101Z84Z15Y1...@usenet.libero.it...

Scusa se sono monotono e, basandomi sulla mia esperienza, ripeto il concetto
già espresso nel mio precedente messaggio.
Se la casella di riepilogo NON ha la selezione multipla, genero il codice a
fronte dell'evento "Su clic" o a fronte dell'evento "Dopo aggiornamento"
della casella di riepilogo.
Se invece la casella di riepilogo è a selezione multipla, seleziono con il
mouse o con le frecce le righe da prendere in considerazione, quindi eseguo
il codice VBA a fronte dell'evento "Su clic" di un pulsante di comando; in
quest'ultimo caso penso sia necessario usare anche la proprietà
ItemsSelected della casella di riepilogo.


 --
Figurati se non ti scuso, mi stai aiutando...!
Quando la casella di riepilogo non è a selezione multipla, se batto col topo
su una qualsiasi voce, tutto bene.
Ma a me piace fare applicazioni che funzionino anche dopo una
derattizzazione (leggi: topo caduto e rotto). In realtà è che mi è meno
difficile usare solo la tastiera, visto che così non devo spostare i
braccini malconci.
Così ho provato a vedere come selezionare una voce da tastiera. La procedura
è: vado su e giu con le <frecce> e quando sono sulla voce che mi serve premo
<invio>. Con le caselle combinate è così che funziona e, stando al @#[!3#*
help di Access, dovrebbe funzionare così anche una casella di riepilogo.
E invece no: l'evento "click" della casella di riepilogo ha luogo non appena
premo una <freccia>.
Questa è l'origine delle mie perplessità (be', le ultime...).
"Roberto dalla campagna for vice-President".
Grazie e buon lavoro.


 ha scritto nel messaggio
news:62Z101Z84Z15Y1...@usenet.libero.it...

A fronte dell'evento "Su invio" della casella di riepilogo genera il
seguente codice VBA:
Dim Pippo As Boolean
If Pippo = True Then
    ' qui inserisci il codice VBA che generavi a fronte dell'evento su clic
Else
    Pippo = True
End If
Ho provato con Access 97 e mi lascia prima selezionare la riga con freccia
su e freccia giù e poi esegue il codice che ti interessa pigiando il tasto
Invio.
Se non sbaglio era quello che volevi.



Ho scritto le cose seguenti per prova:
Option Compare Database
Dim Pippo As Boolean
Private Sub Elenco0_AfterUpdate()
    MsgBox "agg"
End Sub
Private Sub Elenco0_Click()
    MsgBox "click"
End Sub
Private Sub Elenco0_Enter()
    If Pippo = True Then
        MsgBox "riclick"
        ' qui inserisci il codice VBA che generavi a fronte dell'evento su clic
    Else
        Pippo = True
    End If
End Sub
Ho messo la var pippo lassù come secondo tentativo, ma anche nella routine
Enter il risultato è uguale.
Ogni volta che premo freccia su o giu esce il messaggio "agg", poi il
messaggio "click" (quello che rappresenta le mie istruzioni dove si trovano
attualmente). Invece il messaggio "riclick", che dovrebbe rappresentare il
posto dove spostarle, non compare mai. L'help mi dice che:
L'evento Invio si verifica prima che un controllo acquisti lo stato attivo
da un altro controllo della stessa maschera.
Invece l'evento determinato dalla pressione del tasto <invio> è appunto
l'evento SuClick. Questo stando all'help, mentre i fatti dimostrano che è
attivato anche premendo una freccia.
Infatti, finché la casella di riepilogo era l'unico controllo della
maschera, non c'era modo che l'evento INVIO accadesse. Così ho aggiunto una
casella di testo. Quando mi sposto da questa a quella avviene l'evento
INVIO, ma a quel punto mi seleziona il primo valore della lista o, se mi ero
spostato, quello selezionato in precedenza.
Insomma, sembra che Access 2000 sia taroccato. Ora però non ho più a
disposizione un A97 per fare delle prove. Penso che l'unica soluzione,
inelegante, sia sostituire la casella di riepilogo, difettosa, con una
casella combinata. Lì le cose mi funzionano correttamente.
Ti ringrazio per i consigli.






Alla fine ho trovato una soluzione (la notte porta consiglio).
Ho messo gli eventi per il caso SelezioneMultipla a no nell'evento Tasto
Giu, con la clausola:
    If KeyCode = vbKeyReturn Then
mentre per il caso SelezioneMultipla a sì l'ho lasciata SuClick.
Siccome già prima il codice verificava la condizione in cui avevo aperto la
maschera, tutto funzia.
Esempio di aiuto indiretto mediante stimolazione neuronale...
Ciao
