检测Tab键按下TextBox

use*_*327 11 .net c# textbox winforms

我正试图检测一下Tab按键TextBox.我知道,Tab键不会触发KeyDown,KeyUpKeyPress事件.我发现:在互联网上检测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;
}
Run Code Online (Sandbox Code Playgroud)

根据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);
    }
Run Code Online (Sandbox Code Playgroud)

问题是它没有捕获Tab键按下.

Rez*_*aei 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @CodyGray 所有这些概念都是好东西,关注点分离,封装等。但是在 OP 想要处理某个“TextBox”控件的键的情况下,处理 Tab 字符并不是对控件进行子类化的好理由然后运行一个逻辑。它可以简单地使用事件来处理:) (3认同)
  • @CodyGray 已记录在案。阅读文档中的 [备注](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown(v=vs.110).aspx#Anchor_1) 部分。当您可以通过这种方式处理“Tab”键时,为什么需要子类化。 (2认同)

小智 0

您可以使用下面的代码来确定何时按下 TAB 键:

 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) {
           
        }
    }
Run Code Online (Sandbox Code Playgroud)