Ho provato a utilizzare gli eventi KeyUp e KeyDown per leggere l'input da tastiera ma non appena ho posizionato altri controlli su Winform, i tasti non vengono letti. Come posso assicurarmi che i tasti siano letti?Come si legge l'input della tastiera su un Winform?
risposta
È possibile impostare KeyPreview = true
sul modulo per rilevare gli eventi della tastiera.
CURA per farvi capire:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
e.SuppressKeyPress = true;
}
campione Stupido che riceve gli eventi di tastiera e cadere se A è stato premuto.
Se lo stato attivo è in una casella di testo, vedrai che il testo è scritto, ma non A !!
ANCORA NUOVO: Ho preso questo codice da un esempio VB.NET.
Nel tuo usercontrol, utilizza l'evento "Keypress" della casella di testo per generare un "evento di controllo elettronico".
Questo codice sarebbe nel vostro UserControl personalizzato:
'Declare the event
Event KeyPress(KeyAscii As Integer)
Private Sub Text1_KeyPress(KeyAscii As Integer)
RaiseEvent KeyPress(KeyAscii)
End Sub
Questo non ha funzionato, non sto ancora registrando alcun input. – Bildsoe
@Bildsoe: ho provato e funziona. Dovresti catturare gli eventi 'KeyDown' e' KeyUp' sul modulo: li otterrai, assicurati. Se non inserisci il tuo codice per favore, perché dovrebbe esserci qualcosa di sbagliato ... – Marco
ok grazie, ci proverò, devo aver fatto qualcosa di sbagliato. Ho un controllo utente sul mio modulo, questo cambia qualcosa? – Bildsoe
See: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx
impostare KeyPreview = true
e la vostra KeyUp
e KeyDown
riconoscerà tutti gli input da tastiera.
Come dice Marco impostare KeyPreview su true nel modulo per catturare gli eventi chiave nell'intero modulo anziché solo un controllo.
Utilizzare l'evento KeyPress ... KeyUp/Giù sono più per il framework che per il codice. KeyDown è buono se si desidera disabilitare una chiave ... solo campi numerici, ecc. In generale KeyPress è quello che si sta cercando.
Se si desidera impedire che le sequenze di tasti vengano propagate ad altri controlli, impostare KeyPressEventArgs.Handled = true.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx
Avete cablato il gestore di eventi?
MyForm.KeyDown += MyHandler;
Si può anche fare questo nel riquadro Proprietà ... clic sull'icona dell'evento ...
Ho bisogno di entrambi su e giù. Voglio visualizzare i tasti premuti, quindi qualcosa deve accadere sia su keyUp che su keyDown. – Bildsoe
ah capisco ... KeyUp/Down dovrebbe funzionare allo stesso modo. Hai cablato i gestori di eventi? O nel pannello delle proprietà nella sezione eventi o nel codice? MyForm.KeyDown + = MyEventHandler; – iDevForFun
Sì, avevo cablato il gestore eventi. Funziona, ma non se metto un controllo utente sul modulo, allora smette di funzionare. – Bildsoe
Se siete alla ricerca per il modulo stesso per leggere l'input da tastiera, avete già la vostra risposta da altri corrispondenti. Sto aggiungendo questo contributo per la possibilità che tu possa voler aggiungere la gestione delle chiavi ad altri controlli o controlli utente sul tuo modulo. Il mio articolo Exploring Secrets of .NET Keystroke Handling pubblicato su DevX.com (ahimè, richiede una registrazione ma è gratuito) offre una discussione completa su come e perché tutti i vari hook ed eventi keyhandling entrano in gioco. Inoltre, l'articolo include un'utilità "Keystroke Sandbox" per il download gratuito che consente di vedere quali controlli ricevono quali eventi di gestione delle chiavi.
Qui è un'illustrazione da questo articolo per stuzzicare l'appetito:
- 1. Propagazione evento tastiera in winform
- 2. Come si scrive/legge su una smartcard?
- 3. C# Winform si blocca su SerialPort.Close
- 4. Visualizzazione HTML su un winform
- 5. Come si legge un file che si aggiorna costantemente?
- 6. Come si concentra un campo di testo HTML su un iPhone (causando l'arrivo della tastiera)?
- 7. Come si legge l'ennesima riga di un file e lo si stampa su un nuovo file?
- 8. Come si legge la scorciatoia da tastiera personalizzata dall'utente in WPF?
- 9. Come ottenere un contesto di sincronizzazione WinForm o un programma su un thread WinForm
- 10. Come si utilizza un costruttore personalizzato in un WinForm?
- 11. Nascondere l'intestazione su un Winform Infragistics UltraCombo
- 12. Come si legge l'interfaccia utente di qcachegrind?
- 13. Come si legge/scrive un dispositivo a blocchi?
- 14. Come si legge la sorgente numpy?
- 15. Come si legge l'input carattere per carattere in Java?
- 16. Come si legge un pixel fuori dallo schermo?
- 17. Come si legge un file binario tramite HTTP nel nodo?
- 18. Come si legge esattamente una riga?
- 19. Attivazione della tastiera su schermo nel simulatore
- 20. Come si legge l'input formattato in Java?
- 21. Tasto "Vai" della tastiera Android su "Cerca"
- 22. Come posso attivare il pulsante predefinito su un modulo senza fare clic su di esso (Winform)?
- 23. Come scrivere una tastiera su schermo localizzata
- 24. Come si legge un rapporto di arresto anomalo Xcode?
- 25. Come si legge un risultato di SwingWorker * senza * busy busy?
- 26. Come si legge un file gzip riga per riga?
- 27. Come si legge un database di Foxpro 8.0 da C#?
- 28. Come si legge un file che è in uso?
- 29. Come si legge da un file nella stessa directory?
- 30. Come catturare `CParserError` quando si legge un file CSV
Forse cercavi funziona per modulo vuoto e non funziona se c'è un controllo? – Yuan
Sì, come scritto nelle risposte di seguito, funziona per controlli come pulsante, casella di testo, ecc. Ma quando metto un controllo utente smette di funzionare. – Bildsoe
Non dovrebbe funzionare, l'input da tastiera va al controllo con lo stato attivo. Cosa stai cercando di fare? –