我必须在文本框中处理“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");
}
}
答案 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事件。
当你按空格键时,你的文字框就会出现 因此,在您的文本框能够处理输入后,焦点/被选中 关键事件。