检测Tab键按下TextBox

时间:2016-03-10 10:59:32

标签: c# .net winforms textbox

我正试图在TextBox中检测 Tab 键。 我知道Tab键不会触发KeyDownKeyUpKeyPress事件。我发现:在互联网上检测BlackWasp的Windows窗体中的Tab键。 他们建议覆盖我所做的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;
}

根据Cody Gray的建议,我改变了代码如下:

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键按下。

2 个答案:

答案 0 :(得分:14)

某些控件通常会忽略某些按键,例如 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;
    }
}

答案 1 :(得分:0)

你可以使用这个代码来制作标签...

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

        }
    }