【发布时间】: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#