我正在捕获 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/

10-12 15:36