0

我必须处理文本框上的“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");
    }  
}
4

2 回答 2

2

我猜在这个事件中,回车键不算作“普通”键,所以你必须在 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;
        }
    }

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

于 2013-11-06T12:14:00.717 回答
0

首先您必须选择 TextBox,然后您必须按 Enter 键,否则不会触发 Textbox 上的 KeyDown 事件。

当您按空格键时遇到您的情况,您的文本框将获得焦点/被选中,因此在您的文本框能够处理输入键事件之后。

于 2013-11-06T12:09:15.290 回答