我正在捕获 KeyPress-Event 以检查某些类型的允许值。为了能够删除我在实际检查之前使用以下代码
if (e.KeyChar == (char)Keys.Delete || e.KeyChar == (char)Keys.Back)
{
return;
}
...actual check for only digits or whatever
问题是 e.KeyChar == (char)Keys.Delete 当我敲击键盘上的句点时也是如此。
怎么会这样?我能做些什么呢?
谢谢
最佳答案
来自 MSDN documentation on the Keys enumeration :
将这些常量转换为 char 是没有意义的,因为您将丢失有值(value)的信息并且常量值不对应于 ASCII 字符代码。
来自 MSDN concerning the KeyChar property of KeyPressEventArgs :
KeyChar 返回对应于按下的键的 char 值(ASCII 字符代码),而不是其(原始)键代码。因此,您无法检测各种特殊键,也无法将值与 Keys 枚举常量进行比较。
改用 KeyEventArgs 的 KeyCode 属性。由于它是 Keys 类型,而不是 char 类型,因此它非常适合您的目的。为了访问此信息,您必须处理 KeyDown 事件而不是 KeyPress 事件。
顺便说一句,根据 MSDN page on the Control KeyPress event ,对于非字符键根本不会引发此事件:
关于c# - 为什么删除的 KeyChar 与 Period 的返回相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1504754/