Обнаружение клавиши вкладок Нажмите в текстовом поле
Я пытаюсь обнаружить нажатие клавиши Tab в TextBox
.
Я знаю, что клавиша Tab не вызывает события KeyDown
, KeyUp
или KeyPress
. Я нашел: Обнаружение ключа вкладки в Windows Forms BlackWasp в Интернете.
Они предлагают переопределить ProcessCmdKey, который я сделал, но он также не запускается.
Есть ли надежный способ обнаружения нажатия клавиши Tab?
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;
}
Согласно предложению Коди Грея, я изменил код следующим образом:
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);
}
Проблема заключается в том, что он не захватывает нажатие клавиши Tab.
Ответы
Ответ 1
Некоторые нажатия клавиш, такие как клавиши TAB, RETURN, ESC и клавиши со стрелками, обычно игнорируются некоторыми элементами управления, поскольку они не считаются нажатиями клавиш ввода.
Вы можете обработать событие PreviewKeyDown
вашего элемента управления, чтобы обработать эти нажатия клавиш и установить их в качестве клавиши ввода.
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if(e.KeyData == Keys.Tab)
{
MessageBox.Show("Tab");
e.IsInputKey = true;
}
if (e.KeyData == (Keys.Tab | Keys.Shift))
{
MessageBox.Show("Shift + Tab");
e.IsInputKey = true;
}
}
Ответ 2
вы можете использовать этот код для вкладки...
private void input_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//Check here tab press or not
if (e.KeyCode == Keys.Tab)
{
//our code here
}
//Check for the Shift Key as well
if (Control.ModifierKeys == Keys.Shift && e.KeyCode == Keys.Tab) {
}
}