Sto tentando di rilevare la chiave premere in un TextBox
. So che il tasto Tab non attiva gli eventi KeyDown
, KeyUp
o KeyPress
. Ho trovato: Rilevamento della chiave di tabulazione in Windows Form di BlackWasp in Internet. Suggeriscono di sovrascrivere ProcessCmdKey, cosa che ho fatto, ma non viene attivato neanche. Esiste un modo affidabile per rilevare la pressione del tasto Tab?Rileva il tasto di tabulazione Premere in TextBox
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool baseResult = base.ProcessCmdKey(ref msg, keyData);
if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
{
MessageBox.Show("Tab key pressed.");
return true;
}
if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
{
MessageBox.Show("Shift-Tab key pressed.");
return true;
}
return baseResult;
}
Secondo il suggerimento di Cody Grey, ho cambiato il codice come segue:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Tab && textBox_AllUserInput.Focused)
{
MessageBox.Show("Tab key pressed."); }
if (keyData == (Keys.Tab | Keys.Shift) && textBox_AllUserInput.Focused)
{
MessageBox.Show("Shift-Tab key pressed."); }
return base.ProcessCmdKey(ref msg, keyData);
}
Il problema è che non cattura la pressione del tasto Tab.
Sì, ProcessCmdKey() è molto affidabile. Nessuno può dire come lo abbia armeggiato. –
Il mio codice è: override protetto bool ProcessCmdKey (ref Message msg, Keys keyData) { bool baseResult = base.ProcessCmdKey (ref msg, keyData); if (keyData == Keys.Tab && textBox_AllUserInput.Focused) { MessageBox.Show ("Tasto Tab premuto."); return true; } ritorno baseResult; } Ho provato tutte e 3 le risposte e nessuna funziona. – user2102327
Non chiamare l'implementazione di base se hai intenzione di sovrascriverlo. Sposta 'base.ProcessCmdKey (...)' alla fine della funzione. –