Condividi tramite


Panoramica dell'uso della tastiera (Windows Form .NET)

Nei Windows Forms, l'input dell'utente viene inviato alle applicazioni sotto forma di messaggi di Windows . Una serie di metodi sottoponibili a override elabora questi messaggi a livello di applicazione, modulo e controllo. Quando questi metodi ricevono messaggi da tastiera, generano eventi che possono essere gestiti per ottenere informazioni sull'input da tastiera. In molti casi, le applicazioni Windows Form potranno elaborare tutto l'input dell'utente semplicemente gestendo questi eventi. In altri casi, un'applicazione potrebbe dover eseguire l'override di uno dei metodi che elaborano i messaggi per intercettare un determinato messaggio prima che venga ricevuto dall'applicazione, dal modulo o dal controllo.

Eventi della tastiera

Tutti i controlli Windows Form ereditano un set di eventi correlati all'input del mouse e della tastiera. Ad esempio, un controllo può gestire l'evento KeyPress per determinare il codice carattere di un tasto premuto. Per altre informazioni, vedere Uso degli eventi della tastiera.

Metodi che elaborano i messaggi di input dell'utente

I moduli e i controlli hanno accesso all'interfaccia IMessageFilter e a un set di metodi sostituibili che elaborano i messaggi di Windows in punti diversi nella coda dei messaggi. Questi metodi hanno tutti un parametro Message, che incapsula i dettagli di basso livello dei messaggi di Windows. È possibile implementare o eseguire l'override di questi metodi per esaminare il messaggio e quindi consumare il messaggio o passarlo al consumatore successivo nella coda dei messaggi. Nella tabella seguente vengono illustrati i metodi che elaborano tutti i messaggi di Windows in Windows Form.

Metodo Note
PreFilterMessage Questo metodo intercetta i messaggi windows in coda (noti anche come pubblicati) a livello di applicazione.
PreProcessMessage Questo metodo intercetta i messaggi di Windows a livello di modulo e di controllo prima dell'elaborazione.
WndProc Questo metodo elabora i messaggi di Windows a livello di form e controllo.
DefWndProc Questo metodo esegue l'elaborazione predefinita dei messaggi di Windows a livello di modulo e controllo. In questo modo viene fornita la funzionalità minima di una finestra.
OnNotifyMessage Questo metodo intercetta i messaggi a livello di modulo e controllo, dopo l'elaborazione. Per chiamare questo metodo, è necessario impostare il bit di stile EnableNotifyMessage.

I messaggi tramite tastiera e mouse vengono elaborati anche da un set aggiuntivo di metodi sostituibili specifici di tali tipi di messaggi. Per altre informazioni, vedere la sezione chiavi di pre-elaborazione. .

Tipi di chiavi

Windows Form identifica l'input da tastiera come codici di tasti virtuali rappresentati dall'enumerazione bit per bit Keys. Con l'enumerazione Keys, è possibile combinare una serie di tasti premuti per ottenere un singolo valore. Questi valori corrispondono ai valori che accompagnano i messaggi di WM_KEYDOWN e WM_SYSKEYDOWN Windows. È possibile rilevare la pressione della maggior parte dei tasti fisici gestendo gli eventi KeyDown o KeyUp. I tasti carattere sono un insieme parziale dell'enumerazione Keys e corrispondono ai valori che accompagnano i messaggi Windows WM_CHAR e WM_SYSCHAR. Se la combinazione di tasti premuti restituisce un carattere, è possibile rilevare il carattere gestendo l'evento KeyPress.

Ordine degli eventi della tastiera

Come elencato in precedenza, esistono 3 eventi correlati alla tastiera che possono verificarsi in un controllo. La sequenza seguente mostra l'ordine generale degli eventi:

  1. L'utente esegue il push della chiave "a", la chiave viene pre-elaborata, inviata e si verifica un evento KeyDown.
  2. L'utente tiene premuto il tasto "a", il tasto viene pre-elaborato, inviato e si verifica un evento KeyPress. Questo evento si verifica più volte quando l'utente contiene una chiave.
  3. L'utente rilascia la chiave "a", la chiave viene pre-elaborata, inviata e si verifica un evento KeyUp.

Chiavi di pre-elaborazione

Analogamente ad altri messaggi, i messaggi da tastiera vengono elaborati nel metodo WndProc di un form o controllo. Tuttavia, prima dell'elaborazione dei messaggi da tastiera, il metodo PreProcessMessage chiama uno o più metodi che possono essere sottoposti a override per gestire tasti di carattere speciali e tasti fisici. È possibile eseguire l'override di questi metodi per rilevare e filtrare determinate chiavi prima che i messaggi vengano elaborati dal controllo . Nella tabella seguente viene mostrata l'azione che viene eseguita e il metodo correlato che viene applicato, nell'ordine di esecuzione del metodo.

Pre-elaborazione per un evento KeyDown

Azione Metodo correlato Note
Verificare la presenza di un tasto di comando, come un acceleratore o un tasto di scelta rapida del menu. ProcessCmdKey Questo metodo elabora una chiave di comando, che ha la precedenza sulle chiavi normali. Se questo metodo restituisce true, il messaggio della chiave non viene inviato e non si verifica un evento di chiave. Se restituisce false, IsInputKey viene chiamato.
Verificare la presenza di un tasto speciale che richiede la pre-elaborazione o di un tasto carattere normale che deve generare un evento KeyDown e di essere indirizzato a un controllo. IsInputKey Se il metodo restituisce true, significa che il controllo è un carattere regolare e viene generato un evento KeyDown. Se false, allora si chiama ProcessDialogKey. Nota: Per assicurarsi che un controllo ottenga una chiave o una combinazione di tasti, è possibile gestire l'evento PreviewKeyDown e impostare IsInputKey del PreviewKeyDownEventArgs su true per la chiave o i tasti desiderati.
Verificare la presenza di un tasto di spostamento (ESC, TAB, Ritorno o tasti di direzione). ProcessDialogKey Questo metodo elabora una chiave fisica che impiega funzionalità particolari all'interno del controllo, come il cambio di stato attivo tra il controllo e il relativo elemento padre. Se il controllo diretto non gestisce la chiave, il ProcessDialogKey viene chiamato sul controllo padre e così via fino al controllo più in alto nella gerarchia. Se questo metodo restituisce true, la pre-elaborazione è completa e non viene generato un evento chiave. Se restituisce false, si verifica un evento KeyDown.

Elaborazione preliminare per un evento KeyPress

Azione Metodo correlato Note
Verificare che il tasto sia un carattere normale che deve 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 ProcessDialogChar.
Controllare se il carattere è un mnemonico (ad esempio &OK su un pulsante) ProcessDialogChar Questo metodo, simile a ProcessDialogKey, verrà richiamato lungo la gerarchia dei controlli. Se il controllo è un controllo contenitore, verifica la presenza di mnemonic chiamando ProcessMnemonic su se stesso e sui relativi controlli figlio. Se ProcessDialogChar restituisce true, non si verifica un evento KeyPress.

Elaborazione dei messaggi della tastiera

Dopo che i messaggi della tastiera raggiungono il metodo WndProc di una maschera o di un controllo, vengono elaborati da un set di metodi che possono essere sovrascritti. Ognuno 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 alla base o all'elemento padre del controllo per un'ulteriore elaborazione. In caso contrario, il messaggio rimane nella coda dei messaggi e può essere elaborato in un altro metodo nella base o nell'elemento padre del controllo. La tabella seguente presenta i metodi che elaborano i messaggi da 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 all'elemento padre del controllo. Se ProcessKeyPreview restituisce true, non viene generato alcun evento di chiave, altrimenti viene chiamato ProcessKeyEventArgs.
ProcessKeyEventArgs Questo metodo genera gli eventi KeyDown, KeyPresse KeyUp, in base alle esigenze.

Sovrascrittura dei metodi di input della tastiera

Esistono molti metodi disponibili per l'override quando un messaggio da tastiera viene pre-elaborato ed elaborato; tuttavia, alcuni metodi sono scelte molto migliori rispetto ad altri. La tabella seguente illustra le attività da eseguire e il modo migliore per eseguire l'override dei metodi della tastiera. Per ulteriori informazioni sull'override dei metodi, consultare Ereditarietà (Guida per programmatori C#) o Ereditarietà (Visual Basic)

Compito Metodo
Intercettare un tasto di spostamento e generare un evento KeyDown. Ad esempio, si desidera che TAB e Return vengano gestiti in una casella di testo. Eseguire l'override di IsInputKey. Nota: In alternativa, è possibile gestire l'evento PreviewKeyDown e impostare IsInputKey del PreviewKeyDownEventArgs su true per la chiave o le chiavi desiderate.
Eseguire una speciale gestione di input o di navigazione su un controllo. Ad esempio, si vuole che l'uso dei tasti di direzione nel controllo elenco modifichi l'elemento selezionato. Sovrascrivere ProcessDialogKey
Intercettare un tasto di navigazione e generare un evento KeyPress. Ad esempio, in un controllo casella combinata si desidera che la pressione di più tasti freccia acceleri la progressione tra gli elementi. Eseguire l'override di IsInputChar.
Gestire in modo speciale l'input o la navigazione durante un evento KeyPress. Ad esempio, in un controllo elenco, tenendo premuto il tasto "r", si salta tra gli elementi che iniziano con la lettera r. Eseguire l’override di ProcessDialogChar
Eseguire la gestione personalizzata dei mnemotici; ad esempio, si vogliono maneggiare mnemotici sui pulsanti a disegno personalizzato contenuti in una barra degli strumenti. Eseguire l'override di ProcessMnemonic.

Vedere anche