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

In Windows Form, 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, Windows Form applicazioni sarà in grado di elaborare tutti gli 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

Moduli e 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 Message parametro 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 utilizzare il messaggio o passarlo al consumer successivo nella coda dei messaggi. La tabella seguente presenta 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 modulo e di 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 EnableNotifyMessage bit di stile.

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 tasto virtuale rappresentati dall'enumerazione bit per Keys bit. 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 maggior parte dei tasti fisici gestendo gli KeyDown eventi o KeyUp . Le chiavi carattere sono un subset dell'enumerazione Keys e corrispondono ai valori che accompagnano i messaggi di WM_CHAR e WM_SYSCHAR Windows. Se la combinazione di tasti premuti genera un carattere, è possibile rilevare il carattere gestendo l'evento KeyPress .

Ordine degli eventi della tastiera

Come indicato in precedenza, ci sono 3 eventi correlati alla tastiera che possono verificarsi in un controllo. La sequenza seguente illustra l'ordine generale degli eventi:

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

Chiavi di pre-elaborazione

Analogamente ad altri messaggi, i messaggi da tastiera vengono elaborati nel WndProc metodo di una maschera o di un controllo. Tuttavia, prima dell'elaborazione dei messaggi da tastiera, il PreProcessMessage metodo 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 alcuni tasti prima che i messaggi vengano elaborati dal controllo. La tabella seguente mostra l'azione che viene eseguita e il relativo metodo correlato che si verifica, nell'ordine in cui il metodo si verifica.

Pre-elaborazione per un evento KeyDown

Azione Metodo correlato Note
Cercare un tasto di comando, ad esempio un tasto acceleratore o un tasto di menu di scelta rapida. ProcessCmdKey Questo metodo elabora un tasto di comando, che ha la precedenza sui tasti normali. Se questo metodo restituisce true, il messaggio del tasto non viene inviato e non si verifica alcun evento del tasto. Se restituisce false, IsInputKey viene chiamato.
Verificare la presenza di una chiave speciale che richiede la pre-elaborazione o una chiave di carattere normale che deve generare un KeyDown evento e essere inviata a un controllo. IsInputKey Se il metodo restituisce true, significa che il controllo è un carattere normale e viene generato un KeyDown evento. Se false, ProcessDialogKey viene chiamato . Nota: per assicurarsi che un controllo ottenga una chiave o una combinazione di tasti, è possibile gestire l'evento PreviewKeyDown e il PreviewKeyDownEventArgs set IsInputKey di su true per la chiave o le chiavi desiderate.
Cercare un tasto di spostamento (ESC, TAB, INVIO o tasti di direzione). ProcessDialogKey Questo metodo elabora un tasto fisico che impiega funzionalità speciali all'interno del controllo, ad esempio spostando lo stato attivo tra il controllo e il relativo elemento padre. Se il controllo immediato non gestisce la chiave, ProcessDialogKey viene chiamato sul controllo padre e così via al controllo più in alto nella gerarchia. Se questo metodo restituisce true, la pre-elaborazione è completa e non viene generato alcun evento di tasto. Se restituisce false, si verifica un KeyDown evento.

Pre-elaborazione per un evento KeyPress

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

Elaborazione dei messaggi della tastiera

Dopo che i messaggi della tastiera raggiungono il WndProc metodo di una maschera o di un controllo, vengono elaborati da un set di metodi che possono essere sottoposti a override. Ognuno di questi metodi restituisce un Boolean valore 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 della tastiera.

metodo Note
ProcessKeyMessage Questo metodo elabora tutti i messaggi della tastiera ricevuti dal WndProc metodo 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. In caso contrario ProcessKeyEventArgs , viene chiamato .
ProcessKeyEventArgs Questo metodo genera gli KeyDowneventi , KeyPresse KeyUp , in base alle esigenze.

Override dei metodi della tastiera

Sono disponibili molti metodi di cui eseguire l'override quando un messaggio della tastiera viene pre-elaborato ed elaborato, tuttavia alcuni metodi sono preferibili ad altri. La tabella seguente mostra le attività che è possibile eseguire e il modo migliore per eseguire l'override dei metodi della tastiera. Per altre informazioni sull'override dei metodi, vedere Ereditarietà (Guida per programmatori C#) o Ereditarietà (Visual Basic)

Attività metodo
Intercettare un tasto di spostamento e generare un KeyDown evento. Ad esempio si desidera che TAB e INVIO siano gestiti in una casella di testo. Eseguire l'override di IsInputKey. Nota: in alternativa, è possibile gestire l'evento PreviewKeyDown e il set IsInputKey di su PreviewKeyDownEventArgs true per la chiave o le chiavi desiderate.
Eseguire la gestione di input speciali o dello spostamento su un controllo. Ad esempio si desidera che l'uso dei tasti di direzione nel controllo elenco cambi la voce selezionata. Eseguire l'override di ProcessDialogKey.
Intercettare un tasto di spostamento e generare un KeyPress evento. Ad esempio in un controllo casella di selezione si desidera che più pressioni di un tasto di direzione accelerino lo spostamento tra le voci. Eseguire l'override di IsInputChar.
Eseguire una gestione speciale di input o navigazione durante un KeyPress evento. Ad esempio, in un controllo elenco, tenendo premuto il tasto "r" si passa fra le voci che iniziano con la lettera r. Eseguire l'override di ProcessDialogChar.
Eseguire una gestione personalizzata dei tasti di scelta; ad esempio, si desidera gestire i tasti di scelta sui pulsanti disegnati dal proprietario contenuti in una barra degli strumenti. Eseguire l'override di ProcessMnemonic.

Vedi anche