Newsgroup: it.comp.dotnet
Titolo: Wpf quanti tasti sto tenendo premuti?

Ciao a tutti,
ho una domandina da porre.
Ho un controllo wpf, hostato su una form; quando premo un tasto (diciamo lo 
0) deve partire una certa routine. Per far cio' vado a vedere, nell'evento 
KeyDown, se la proprieta' Key dell'argomento di tipo 
System.Windows.Input.KeyEventArgs e' Key.D0 oppure Key.NumPad0, e fin qui 
tutto ok.
Mi e' venuto in mente che questa routine viene chiamata anche se, 
contemporaneamente al tasto "0", sto tenendo premuto un qualunque altro 
tasto, e questo non e' il comportamento che mi piacerebbe ottenere.
Ho modo di sapere se, oltre al mio "0", sto tenendo premuto anche altri 
tasti? Naturalmente non mi basta andare a controllare i vari Control, Shift 
ecc.. ma dovrei sapere se un qualunque altro tasto e' stato premuto.
Spero di essermi spiegato :-)
Uso VB2008
Grazie e ciao... Maurizio
 


Ciao,
se non hai bisogno di sapere anche quali sono i tasti premuti dovrebbe 
esserti sufficiente aggiungere un contatore che incrementi ad ogni 
KeyDown e decrementi ad ogni KeyUp. Quando ricevi il tasto che ti 
interessa non dovrai far altro che verificare che il contatore valga 1.

se non hai bisogno di sapere anche quali sono i tasti premuti dovrebbe
esserti sufficiente aggiungere un contatore che incrementi ad ogni
KeyDown e decrementi ad ogni KeyUp.
...
Si si, a questo avevo gia' pensato. Speravo pero' in una soluzione un po' 
piu' elegante.
Grazie e ciao... Maurizio
 

Elegante? Non so cosa tu intenda per 'elegante'; invece definirei poco 
elegante un qualsiasi accrocchio  differisca da questa soluzione.
 
Un saluto.

 tasto, e questo non e' il comportamento che mi piacerebbe ottenere.
 
ti è venuto in mente o hai verificato che è così? perchè a me un po' 
puzza che non sia possibile, mi sa che i "modifier key" sono gli unici 
che possono essere premuti insieme ad un altro key. Per tutti gli altri 
dovresti avere eventi separati.
 
.m
 
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
 
blog @ 
http://milestone.topics.it
 
whynot [ at ] topics [ dot ] it
 
 

Elegante? Non so cosa tu intenda per 'elegante'; invece definirei poco
elegante un qualsiasi accrocchio  differisca da questa soluzione.
...
Tanto per dire, se potessi controllare lo statade esempio, della tastiera, e 
vedere quanti tasti sono premuti, sarebbe un modo "piu' elegante" :-)
Cmq, il metodo che hai suggerito, e che avevo pensato anche io, non dovrebbe 
essere malaccio :)
Grazie ancora
 

ti è venuto in mente o hai verificato che è così? perchè a me un po'
puzza che non sia possibile, mi sa che i "modifier key" sono gli unici
che possono essere premuti insieme ad un altro key.
...
Ho verificato perche' mi e' venuto in mente :-)
Mi spiego meglio, forse non sono stato troppo chiaro...
Diciamo che, come da primo esempio, voglio "reagire" alla pressione del 
tasto "0", ma solo se e' premuto esclusivamente lui.
 
Come prima cosa premo (e tengo premuto) il tasto "x", parte l'evento 
KeyDown, vedo che non e' il tasto che mi interessa, e passo oltre.
 
Mentre sto ancora tenendo giu' il tasto "x", premo il tasto "0", che e' 
proprio quello che serve a me, parte, come dici tu, un suo evento KeyDown, e 
nella gestione dello stesso dovrei fare tutte quelle cose che ho 
previsto.... pero' solo se non ci sono altri tasti premuti.
 

 pero' solo se non ci sono altri tasti premuti.
 
questo perchè la combinazione x+0 ha un significato diverso?


questo perchè la combinazione x+0 ha un significato diverso?
...
No no, x+0 non ha nessun significato
 

Ciao vbMizio,
 
You wrote on 29/09/2011 :

rieccomi, quindi dove sta il problema? tu avrai sempre e solo l'evento 
per 0 e mai per X, se l'utente nel frattempo preme anche altro perchè 
dovrebbe essere un problema?
