keyPress和keydown这两段代码 c#

来源:百度知道 编辑:UC知道 时间:2024/06/23 16:57:26
private void txtAge_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar < 48 || e.KeyChar > 57 )
e.Handled = true;//remove the character

}
private void txtAge_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
这两段代码为什么下面我想让如果不是输入的是数字就不允许输入,但是第二段为什么不行?

e.Handled = true;
}

跟事件有关,KeyDown这个事件是处理任何不被 KeyPress 识别的击键。

KeyPress事件
KeyPressEventArgs参数

Handled /是否处理过KeyPress事件
KeyChar //按下的键对应的字符

如果I,则keychar为i,如果shift+i,则keychar为I。
如果是Ctrl+I,或ALt+I,根本不会得到一个keypress事件,因为他们是特殊的键序列,并非通过KeyPress发送。
需要KeyDown

KeyDown
KeyEventArgs参数
Alt 获取一个值,该值指示是否曾按下 Alt 键。
Control 获取一个值,该值指示是否曾按下 Ctrl 键。
Handled 获取或设置一个值,该值指示是否处理过此事件。
KeyCode 获取 KeyDown 或 KeyUp 事件的键盘代码。
KeyData 获取 KeyDown 或 KeyUp 事件的键数据。
KeyValue 获取 KeyDown 或 KeyUp 事件的键盘值。
Modifiers 获取 KeyDown 或 KeyUp 事件的修饰符标志。这些标志指示按下的 Ctrl、Shift 和 Alt 键的组合。
Shift 获取一个值,该值指示是否曾按下 Shift 键。
SuppressKeyPress 获取或设置一个值,该值指示键事件是否应传递到基础控件。

如果同时按下了Ctrl+Shift+I
KeyData Keys.Ctrl+Keys。Shift+Keys。I
KeyCode Keys。I
Modifiers Keys。Ctrl+Keys。Shift
Alt false
Ctrl true
Shift true
KeyValue 73
KeyChar 不可用

尽管我们处理了KeyDown来获得特殊的字符,但是有