我正在尝试检测TextBox中的Tab键按下。
我知道Tab键不会触发KeyDownKeyUpKeyPress事件。我发现:在Internet中检测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键。

最佳答案

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

关于c# - 检测文本框中的Tab键按下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35914536/

10-15 06:40