c# - 检测 TextBox 中的 Tab 键按下

标签 c# .net winforms textbox

我正在尝试检测 TextBox 中的 Tab 键按下。 我知道 Tab 键不会触发 KeyDownKeyUpKeyPress 事件。我在网上找到:Detecting the Tab Key in Windows Forms of 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;
}

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

最佳答案

某些按键,例如 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;
    }
}

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

相关文章:

c# - 我如何将 .net 的 HttpWebRequest 移植到 iOs 的 URLRequest

c# - 使用更改所有实例的静态字段来更改类的所有实例中的字段

c# - 如何制作具有相同行为的不同面板?

c# - Microsoft.NETCore.UniversalWindowsPlatform 5.2.2 Nuget 更新失败

c# - 在 Windows 中以兼容模式启动应用程序如何影响该应用程序以及我如何检测它?

c# - 如何暂停控件及其子项的绘制?

c# - 如何就地刷新组合框项目?

c# - 避免重复的Dockerfile

c# - 委托(delegate)操作 : new Action or casting Action?

c# - 线程与 Task.ConfigureAwait(false) 同步