Newsgroup: it.comp.lang.visual-basic
Titolo: Alt + KeyDown

mi sembra impossibile, ma non riesco a venirne a capo...
dunque, per semplificare immaginate un form su cui ci sia solamente una
TextBox, col Focus sempre su di lei.
vorrei utilizzare la combinazione di tasti Alt + Numpad per eseguire del
codice particolare (tipo cambiare il colore del font ), col solito:
if Shift = VbAltMask then
        Select Case KeyCode
inserito in Text1_KeyDown
fin lě tutto bene... eseguo senza problemi il codice che desidero... il
problema č che, OLTRE ad ottenere ciň che voglio, nella Textbox vengono
inseriti i caratteri + strani (ad es. se premo Alt+Numpad9, quando rilascio
Alt č come se premessi Tab, Alt+NumPad8, al rilascio di Alt č come se
premessi Canc), e poi segni +, parentesi graffe ecc. ecc....
ovviamente ho provato a mettere dappertutto del codice tipo KeyCode=0 o
Shift=0
ho anche provato ad eseguire il codice in Form_KeyDown, anziché in
Text_KeyDown, dopo aver posto il KeyPreview a True... ma non cambia
assolutamente nulla
qualche suggerimento, pls?

[*phil* = 
phi...@tin.it
 in news:3UpAb.166277$
hV.60...@news2.tin.it
] ha
scritto:

Se metti il tutto in KeyUp (ovviamente ponendo poi KeyCode=0 se č uno dei
"tuoi" tasti) deve andare a posto.
Il problema che indichi nasce dal fatto tu intercetti i tasti al KeyDown e
li azzeri pure, ma appena rilasci il tasto si verifica il KeyUp e il tasto
stesso viene preso in carico da windows e opportunamente riprodotto.

 opportunamente riprodotto.
Ho verificato e ho detto una sciocchezza: i tasti (ho provato col tasto "a")
vengono elaborati al KeyDown e non al KeyUp (tranne forse eccezioni da
verificare). Non sarebbe infatti possibile la ripetizione tenendo premuto il
tasto.
A questo punto, se non hai istruzioni nel KeyUp e se lo stesso non si
verifica se KeyCode viene posto a 0 nel KeyDown (non ho provato con tasti
funzione e multitasti) non saprei proprio cosa possa essere. Sarebbe
interessante vedere un po' del codice che hai usato...

dai e dai ho realizzato che non si annulla un carattere ponendo KeyCode = 0
in un evento KeyDown, ma ponendo KeyAscii = 0 in un evento KeyPress...
ponendo un:
Debug.Print  KeyAscii
in un evento KeyPress si nota come tenendo premuto Alt, puoi premere tutti i
tasti che vuoi ma il buffer non si scarica (ed il debug.print non stampa)
finchè non molli il tasto Alt (è il classico Alt +126 che dà "~", ecco il
perché dei caratteri strani che mi appaiono, che bestia che sono!)...
noterai anche che Alt + i vari tasti del tastierino numerico premuti UNA
SOLA volta dà valori tra 1 e 9... per cui col seguente codice:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 1 To 9: KeyAscii = 0
Case Else
End Select
End Sub
il problema IN PARTE si risolve, ma non è per nulla a prova di errore: se
premo Alt + DUE o più volte i tasti del tastierino esce una combinazione di
codice che non si può mettere a 0, in quanto possono essere anche lettere o
caratteri da inserire effettivamente nella TextBox... e nella TextBox
appaiono i caratteri non voluti...
nessun problema usando Ctrl + Numpad... peccato che siano già usati per
altre routines...
bb

 nella TextBox... e nella TextBox appaiono i caratteri non voluti...
Mi dispiace, ma questo sta al programmatore: deve controllare esattamente
tutti i tasti e tutte le combinazioni possibili (ovvero quelle che
l'operatore può generare)...
In ogni caso la tecnica (sicura, te lo posso garantire) è quella di azzerare
i tasti intercettati per "proprie" funzioni in _ogni_ evento (e non IN
PARTE) che gli stessi possono generare.