TextBox没有监听在C#中按空格键之前输入密钥

时间:2013-11-06 12:04:39

标签: c#

我必须在文本框中处理“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 bar之前不起作用。这就是我使用按键的方式,注意 e.KeyChar =='\ r'

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

2 个答案:

答案 0 :(得分: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;
        }
    }

例如,箭头键也是如此。当然,您的文本框需要首先关注。

答案 1 :(得分:0)

  

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

     

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