Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 sono 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
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 dell'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 sia a livello di modulo che 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 bit di stile EnableNotifyMessage. |
I messaggi tramite tastiera e mouse vengono elaborati 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. In alternativa, è possibile usare Keyboard, esposto dall'interfaccia di programmazione di Visual Basic, per individuare quali tasti sono stati premuti e inviare i tasti. Per altre informazioni, vedere Accesso alla tastiera (Visual Basic).
Ordine degli eventi della tastiera
Come elencato in precedenza, esistono tre eventi correlati alla tastiera che possono verificarsi in un controllo. La sequenza seguente mostra l'ordine generale degli eventi:
- L'utente esegue il push della chiave A , la chiave viene pre-elaborata, inviata e si verifica un KeyDown evento.
- 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 contiene una chiave.
- L'utente rilascia la chiave A , la chiave viene pre-elaborata, inviata e si verifica un KeyUp evento.
Chiavi di pre-elaborazione
Come avviene per altri messaggi, i messaggi da tastiera vengono elaborati nel metodo WndProc di un form o di un 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 il controllo elabori i messaggi. 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 di 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 se c'è una chiave speciale che richiede preprocessazione o se un tasto carattere normale deve generare un evento KeyDown e essere inviato a un controllo. | IsInputKey | Se il metodo restituisce true , significa che il controllo è un carattere standard 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 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 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 dovrebbe 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, viene chiamato ProcessDialogChar. |
Controllare se il carattere è un mnemonico (ad esempio &OK su un pulsante) | ProcessDialogChar | Questo metodo, simile a ProcessDialogKey, viene richiamato nella 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 KeyPress evento. |
Elaborazione dei messaggi della tastiera
Dopo che i messaggi della tastiera raggiungono il WndProc metodo di una maschera o 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 potrebbe 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 migliori rispetto ad altre. 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)
Attività | Metodo |
---|---|
Intercettare un tasto di navigazione e generare un evento KeyDown. Ad esempio, si vuole che Tab e INVIO vengano gestiti in una casella di testo. | Eseguire l'override di IsInputKey. In alternativa, è possibile gestire l'evento PreviewKeyDown e impostare il IsInputKey di 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. |
Gestisci 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. | Sovrascrivere 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
.NET Desktop feedback