it-swarm.com.ru

Определить нажатие клавиши Tab в TextBox

Я пытаюсь обнаружить Tab нажмите клавишу в TextBox. Я знаю, что клавиша Tab не вызывает события KeyDown, KeyUp или KeyPress. Я нашел: Обнаружение клавиши Tab в 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.

9
user2102327

Некоторые нажатия клавиш, такие как TABRETURNESCи клавиши со стрелками, как правило, игнорируются некоторыми элементами управления, потому что они не считаются нажатиями клавиш ввода.

Вы можете обработать 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;
    }
}
12
Reza Aghaei

вы можете использовать этот код для табуляции ...

 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) {

        }
    }
0
Tejas Girase