Funzionamento dell'input da tastiera

Gli input della tastiera vengono elaborati in Windows Form mediante la generazione di eventi della tastiera in risposta a messaggi di Windows. La maggior parte delle applicazioni Windows Form elabora gli input della tastiera solo tramite la gestione dei relativi eventi. È tuttavia necessario comprendere il funzionamento dei messaggi della tastiera per implementare scenari di input della tastiera più avanzati, come l'intercettazione dei tasti prima che vengano inviati a un controllo. In questo argomento vengono descritti i tipi di dati riconosciuti da Windows Form e viene fornita una panoramica sulla modalità di invio dei messaggi della tastiera. Per informazioni sugli eventi della tastiera, vedere Utilizzo degli eventi di tastiera.

Tipi di tasti

Windows Form identifica gli input della tastiera come codici di tasti virtuali rappresentati dall'enumerazione bit per bit Keys. Con l'enumerazione Keys, è possibile combinare la pressione di una serie di tasti per ottenere un valore singolo. Questi valori corrispondono ai valori associati ai messaggi di Windows WM_KEYDOWN e WM_SYSKEYDOWN. La maggior parte delle pressioni fisiche dei tasti può essere rilevata gestendo l'evento KeyDown o l'evento KeyUp. I tasti carattere costituiscono un sottoinsieme dell'enumerazione Keys e corrispondono ai valori associati ai messaggi di Windows WM_CHAR e WM_SYSCHAR. Se la combinazione dei tasti premuti produce un carattere, è possibile individuare il carattere gestendo l'evento KeyPress. In alternativa, è possibile utilizzare la classe Keyboard, esposta dall'interfaccia di programmazione di Visual Basic, per individuare i tasti premuti e inviare i tasti. Per ulteriori informazioni, vedere Accesso alla tastiera (Visual Basic).

Ordine degli eventi della tastiera

Come riportato in precedenza, in un controllo possono verificarsi 3 eventi collegati alla tastiera. Nella sequenza descritta di seguito è illustrato l'ordine generale degli eventi.

  1. L'utente preme il tasto "a", il tasto viene pre-elaborato e inviato e viene generato un evento KeyDown.

  2. L'utente tiene premuto il tasto "a", il tasto viene pre-elaborato e inviato e viene generato un evento KeyPress.

    Questo evento si verifica più volte per il tempo in cui l'utente tiene premuto il tasto.

  3. L'utente rilascia il tasto "a", il tasto viene pre-elaborato e inviato e viene generato un evento KeyUp.

Pre-elaborazione dei tasti

Come altri messaggi, i messaggi della tastiera sono elaborati nel metodo WndProc di un form o di un controllo. Tuttavia, prima che i messaggi della tastiera vengano elaborati, il metodo PreProcessMessage chiama uno o più metodi che possono essere sottoposti a override per gestire tasti di caratteri speciali e tasti fisici. È possibile eseguire l'override di questi metodi per individuare e filtrare alcuni tasti prima che i messaggi vengano elaborati dal controllo. Nella tabella riportata di seguito viene illustrata l'azione da effettuare e il relativo metodo, secondo l'ordine di esecuzione dei metodi.

Pre-elaborazione per un evento KeyDown

Azione

Metodo collegato

Note

Verificare la presenza di un tasto di comando, ad esempio un tasto di scelta rapida o un tasto di scelta rapida di menu.

ProcessCmdKey

Questo metodo elabora un tasto di comando, che ha la precedenza sui tasti normali. Se il metodo restituisce true, il messaggio del tasto non viene inviato e non vengono generati eventi del tasto. Se restituisce false, viene chiamato il metodo IsInputKey.

Verificare la presenza di un tasto speciale che richieda la pre-elaborazione o di un tasto carattere normale che deve generare un evento KeyDown ed essere inviato a un controllo.

IsInputKey

Se il metodo restituisce true, il controllo è un carattere normale e viene generato un evento KeyDown. Se restituisce false, viene chiamato il metodo ProcessDialogKey.

NotaNota
Per verificare che un controllo ottenga un tasto o una combinazione di tasti, è possibile gestire l'evento PreviewKeyDown e impostare la proprietà IsInputKey di PreviewKeyDownEventArgs su true per il tasto o i tasti desiderati.

Verificare la presenza di un tasto di navigazione (ESC, TAB, ritorno a capo o tasti di direzione).

ProcessDialogKey

Questo metodo elabora un tasto fisico che impiega funzionalità speciali all'interno del controllo, come il passaggio dello stato di attivazione dal controllo al controllo padre e viceversa. Se il controllo diretto non gestisce il tasto, viene chiamato il metodo ProcessDialogKey sul controllo padre e così via fino al primo controllo nella gerarchia. Se il metodo restituisce true, la pre-elaborazione è completa e non vengono generati eventi del tasto. Se restituisce false, viene generato un evento KeyDown.

Pre-elaborazione per un evento KeyPress

Azione

Metodo collegato

Note

Verificare che il tasto sia un carattere normale che dovrà essere elaborato dal controllo

IsInputChar

Se il carattere è un carattere normale, questo metodo restituisce true, viene generato l'evento KeyPress e non si verifica alcuna ulteriore pre-elaborazione. In caso contrario, verrà chiamato il metodo ProcessDialogChar.

Verificare che il carattere rappresenti un tasto di scelta (come &OK su un pulsante)

ProcessDialogChar

Questo metodo, simile al metodo ProcessDialogKey, viene chiamato nella parte superiore della gerarchia dei controlli. Se il controllo è un controllo contenitore, viene verificata la presenza di tasti di scelta chiamando il metodo ProcessMnemonic sul controllo stesso e sui controlli figlio. Se ProcessDialogChar restituisce true, l'evento KeyPress non viene generato.

Elaborazione dei messaggi della tastiera

Una volta che i messaggi della tastiera raggiungono il metodo WndProc di un form o di un controllo, vengono elaborati da un gruppo di metodi che è possibile sottoporre a override. Ciascuno di questi metodi restituisce un valore Boolean che specifica se il messaggio della tastiera è stato elaborato e utilizzato dal controllo. Se uno dei metodi restituisce true, il messaggio viene considerato gestito e non viene passato al controllo base o al controllo padre per l'ulteriore elaborazione. In caso contrario, il messaggio rimane nella relativa coda e può essere elaborato in un altro metodo nel controllo base o nel controllo padre. Nella tabella riportata di seguito sono riportati i metodi che elaborano i messaggi della tastiera.

Metodo

Note

ProcessKeyMessage

Questo metodo elabora tutti i messaggi della tastiera ricevuti dal metodo WndProc del controllo.

ProcessKeyPreview

Questo metodo invia il messaggio della tastiera al controllo padre del controllo. Se ProcessKeyPreview restituisce true, non viene generato alcun evento della tastiera. In caso contrario, viene chiamato il metodo ProcessKeyEventArgs.

ProcessKeyEventArgs

Questo metodo genera gli eventi KeyDown, KeyPress e KeyUp, a seconda dei casi.

Override dei metodi della tastiera

Quando un messaggio della tastiera viene pre-elaborato ed elaborato, sono disponibili per l'override molti metodi. Alcuni di essi sono tuttavia preferibili ad altri. Nella tabella riportata di seguito sono descritte le attività che è possibile eseguire e i metodi migliori per sottoporre a override i metodi della tastiera. Per ulteriori informazioni sull'override dei metodi, vedere Overriding Properties and Methods.

Attività

Metodo

Intercettare un tasto di navigazione e generare l'evento KeyDown, ad esempio per gestire i tasti TAB e ritorno a capo in una casella di testo.

Eseguire l'override di IsInputKey.

NotaNota
In alternativa, è possibile gestire l'evento PreviewKeyDown e impostare IsInputKey di PreviewKeyDownEventArgs su true per il tasto o i tasti desiderati.

Gestire input speciali o di navigazione in un controllo, ad esempio se si desidera utilizzare i tasti freccia nel controllo elenco per selezionare un altro elemento.

Eseguire l'override di ProcessDialogKey.

Intercettare un tasto di navigazione e generare l'evento KeyPress, ad esempio se si desidera disporre di più tasti freccia da premere per accelerare lo spostamento tra gli elementi in un controllo casella di selezione.

Eseguire l'override di IsInputChar.

Gestire input speciali o di navigazione durante un evento KeyPress, ad esempio se si desidera tenere premuto il tasto "r" per selezionare gli elementi che iniziano con la lettera r in un controllo elenco.

Eseguire l'override di ProcessDialogChar.

Gestire tasti di scelta personalizzati, ad esempio se si desidera gestire tasti di scelta presenti su pulsanti creati dal proprietario in una barra degli strumenti.

Eseguire l'override di ProcessMnemonic.

Vedere anche

Riferimenti

Keys

WndProc

PreProcessMessage

Concetti

Accesso alla tastiera (Visual Basic)

Utilizzo degli eventi di tastiera

Altre risorse

My.Computer.Keyboard Object