这可能有点突兀,但是你说过你已经设置了KeyUp、KeyDown和KeyPress事件处理程序,你有将e.Handled标志设置为true吗?请看这里:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
e.Handled = true;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
请在
MSDN中查看有关此Handled属性的信息。(如果您本地安装了MSDN 2008 SP 1,则链接为ms-help://MS.MSDNQTR.v90.en/fxref_system.windows.forms/html/dfc80b44-1d79-6315-cbea-1388a048c018.htm)
引用一下:
Handled在Windows Forms中由不同的控件以不同的方式实现。 对于像TextBox这样的子类本地Win32控件的控件,它被解释为不应将关键消息传递给底层本地控件。
如果您在TextBox上设置了Handled为true,则该控件将不会将按键事件传递给底层Win32文本框控件,但它仍将显示用户键入的字符。
也许它没有被设置,即
e.Handled = false;
从而防止TextChanged事件触发?
您能检查并确认一下吗?
编辑:在dreadprivateryan的回复后,我可以怀疑(由于未发布代码),基于他的回复,当按Enter键时e.Handled为true,而其他情况则为false,这在我看来是导致不再接受进一步按键的原因。
- 你是否正在尝试在按下Enter键时将焦点设置到另一个控件?可能是KeyUp和KeyDown发生冲突...
- 移除键盘钩子并禁用它...
- 我的建议是完全改变代码,如下所示,删除KeyDown或KeyUp事件处理程序之一,因为它们简单地说是相同的,技术上讲,分别指定了按下键时和释放键时。请看这个链接here。在SO上发布了一个类似的问题here。
在下面的示例中,我使用keyUp事件处理程序在按下enter键时切换到下一个可用控件。在KeyPress事件处理程序中,这只是过滤输入,仅允许数字0-9,其他任何内容都被丢弃。该事件处理程序中还包括允许使用退格键进行编辑。
私有 void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) SendKeys.Send("{TAB}");
}
私有常量字符串 VALID_KEYS = "0123456789";
私有 void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (VALID_KEYS.IndexOf(char.ToUpper(e.KeyChar)) != -1 || e.KeyChar == (char)8)
e.Handled = false;
else
e.Handled = true;
}