Newsgroup: it.comp.lang.visual-basic
Titolo: KeyPress, KeyDown e KeyUp

In un Form al cui interno si trovano soltanto un controllo
CommandButton e un controllo Label come faccio a intercettare (e
gestire) la pressione dei tasti freccia? 
Possibile che non sia possibile?
Ringrazio sin d'ora quanti sapranno aiutarmi,
   Roberto
email: 
ro...@ctonline.it

 wrote in message
388123b7...@news.ctonline.it...


I tasti freccia hanno il valore ascii da 37 a 40 ....
Mi spiego meglio. E' vero che gli eventi KeyDown, KeyPress e KeyUp
esistono per il CommandButton e per il Form (mentre ahimè non per la
Label). Però l'evento KeyDown del CommandButton non viene generato
quando vengono premuti i tasti freccia in quanto tali tasti vengono
già gestiti automaticamente dal CommandButton (infatti in presenza di
più CommandButton su uno stesso form la pressione dei tasti freccia
sposta il focus da un CommandButton all'altro...).
Nè posso pensare di attivare il form perchè in esso ci sono controlli
attivi che non lo consentono.
Che fare?
   Roberto
email: 
ro...@ctonline.it

Ciao,
imposta la proprieta'  KeyPreview del form, dopo di che' puoi intercettare
la pressione dei tasti all'interno della form
es:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyPageUp Then Label1.Caption = "pagina su"
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
    Label1.Caption = Chr$(KeyAscii)
End Sub
Private Sub Form_Load()
    Me.KeyPreview = True
End Sub
una curiosita'??:-o
ma se nel form hai solo un button e una label, a cosa ti serve intercettare
la pressione dei tasti???;-))
beppe


 
E' possibile se imposti KeyPreview della Form su True. In questo modo, i
tasti premuti generano gli eventi Form_KeyDown, Form_KeyUp,
Form_KeyPress
Ciao
Flavio Ronco
-- 
f.ronco@*NonMiServeNiente*
flashnet.it
http://www.metabrains.com
  [Under Construction]
-------------------------------------------------------------
"Che pubblico in gamba! Se ci dite dove lavorate,
domani mattina se abbiamo tempo vi veniamo a vedere"
[Paolo Rossi]




beppe
Grazie proverò a fare come dici, ma soddisfo subito la tua curiosità
:)
Sto realizzando un calendarietto in cui non ho un'unica label ma una
matrice di label (in cui vado a inserire i giorni del mese) e voglio
che tali giorni siano selezionabili da mouse... e da tastiera con i
tasti freccia.
   Roberto
email: 
ro...@ctonline.it

quindi non possono ricevere messaggi come i keypress.
Le Label no, perň gli eventi KeyPress il CommandButton e il Form li
riconoscono. Il mio problema č che il CommandButton (unico controllo
con focus sul form) gestisce automaticamente la pressione dei tasti
freccia senza generare alcun evento KeyPress,KeyDown o KeyUp (infatti,
in presenza di piů CommandButton su un form, premendo i tasti freccia
si ha lo spostamento del focus da un CommandButton all'altro).
Io invece vorrei bypassare la gestione automatica del CommandButton e
fare in modo 
   Roberto
email: 
ro...@ctonline.it

la pressione dei tasti all'interno della form
Con i tasti freccia purtroppo questa soluzione non funziona. Il
CommandButton continua a mantenere il "potere" sui tasti freccia e non
vuole saperne di cedere la gestione.
Mi pare assurdo che non si possa realizzare una cosetta come questa
solo perchè sul form c'è un CommandButton!!
   Roberto
email: 
ro...@ctonline.it

Form_KeyPress
Già provata anche questa strada, ma ugualmente con i tasti freccia non
funziona fintanto che sul form c'è il CommandButton attivo. 
Nonostante il KeyPreview del form su True, il CommandButton continua a
mantenere la gestione dei tasti freccia. 
   Roberto
email: 
ro...@ctonline.it

 Label).
Solo i tasti freccia (e da soli) non attivano gli eventi Key sul Form
con KeyPreview a true.
Se già gli aggiungi shift o Ctrl, o addirittura se premi Tab, gli eventi
del Form funzionano correttamente e hanno la priorità. Credo che
l'intercettazione da parte del Command Button non sia una spiegazione.
Altrimenti anche Tab, e a maggior ragione, dovrebbe essere ignorato dal
form e destinato al passaggio di focus d un pulsante all'altro.
Io proverei a sostituire le label con una matrice di Command Button
piatti. Unico inconveniente, il pulsante selezionato avrebbe il riquadro
tratteggiato di selezione visibile, e ciò potrebbe dar fastidio.
Mi sa che per i tasti freccia non c'è verso, in puro VB. Con un po' di
ingegno e qualche API function dovrebbe però essere possibile.


 wrote in message
38806832...@news.ctonline.it...


 in presenza di più CommandButton su un form, premendo i tasti freccia


essere vuota, nel qual caso imposterei il borderstyle  come none poi
Frazie, facendo come dici sono riuscito a risolvere il problema!!
Certo, è un trucchetto un po' sporco, ma funziona egregiamente. Il mio
calendarietto adesso funziona!! ;)
   Roberto
email: 
ro...@ctonline.it