【问题标题】:TextBox not listening Enter key before Space key is pressed in C#在 C# 中按下 Space 键之前,TextBox 不听 Enter 键
【发布时间】:2013-11-06 12:04:39
【问题描述】:

我必须处理文本框上的“Enter”键事件,因此我创建了一个继承自 textBox 的新类,并且已经覆盖了 IsInputKey 方法。问题是在没有先按空格键的情况下不会触发 KeyDown 事件。

public class EnterTextBox : TextBox
{
    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            return true;
        }
        else
        {
            return base.IsInputKey(keyData);
        }
    }
}

从上面的类创建后为

EnterLisTextBox enterTextBox1 = new EnterLisTextBox();            
enterTextBox1.KeyDown += enterTextBox1_KeyDown;

按键按下事件处理程序是

void enterTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("Pressed enter");;
    }  
}

但这只有在我使用“回车键”之前按下“空格键”时才有效。但是一旦我按下空格键,即使我在文本框中重新输入所有内容,它也会起作用。为什么是这样?为什么按空格键是先决条件?

更新:

实现 keyPress 事件对我有用,但如果有人知道为什么在使用 sapce 栏之前上述方法不起作用。这是我使用按键的方式,注意 e.KeyChar == '\r'

void enterTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\r')
    {
        MessageBox.Show("Pressed enter");
    }  
}

【问题讨论】:

  • TextBox 有焦点吗?
  • 我测试过,它按预期工作。也许您的项目中还有其他东西会影响EnterTextBox的行为...
  • 不适合我,但 keyPress 工作正常。我没有对上面未发布的 EnterTextBox 做过任何事情。

标签: c#


【解决方案1】:

我猜回车键在这个事件中不算是“普通”键,所以你必须在 PreviewKeyDown 事件方法中显式使它成为输入键:

    private void enterTextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Down:
                e.IsInputKey = true;
                break;
            case Keys.Up:
                e.IsInputKey = true;
                break;
            case Keys.Enter:
                e.IsInputKey = true;
                break;
        }
    }

例如,箭头键也是如此。当然,您的文本框需要首先获得焦点。

【讨论】:

    【解决方案2】:

    首先你必须选择文本框然后你必须按回车键,否则 文本框上的 KeyDown 事件不会被触发。

    当您按下空格键时,您的文本框会出现 在您的文本框能够处理输入之后,焦点/被选中 关键事件。

    【讨论】:

    • 这不是问题,问题是输入后它不会接受回车键。如果我不需要空格,我必须按空格键然后将其删除。然后它触发事件。
    • 刚刚解决了它,实现了 keyPress 事件并且它起作用了。但是为什么它对 keyDown 不起作用对我来说仍然是个谜
    • @user2960189:好的,但正如你所说,我们必须确定它在 KeyDown 事件中不起作用的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多