Обнаружение клавиши вкладок Нажмите в текстовом поле

Я пытаюсь обнаружить нажатие клавиши 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) {

        }
    }