我有一个用于过滤输入的 PreviewKeyDown 事件(我需要过滤掉空格等,所以使用 PreviewKeyPress 就不用了)。
一切都工作正常,除了它吃掉我的删除,退格键,主页,箭头,向上翻页等按键。
我可以尝试考虑我认为应该允许的所有密钥,并告诉我的事件忽略它们:
if ((e.Key == Key.Up) || (e.Key == Key.Down) || (e.Key == Key.Left)
|| (e.Key == Key.Right) || (e.Key == Key.Delete) || (e.Key == Key.Home)
|| (e.Key == Key.End) || (e.Key == Key.PageUp) || (e.Key == Key.Insert)
|| (e.Key == Key.F1))
但我相信我会想念一些。
有没有更好的方法,只是做一个巨大的"或"声明并希望我得到它们?
我会在KeyPress
中进行过滤。此时,您将处理字符,而不是键。所以你不需要关心其中的大多数(AFAIR有一些例外,比如返回或退格)。
使用e.Handled
来压制字符。
我正在使用这个: 你如何获得适合给定 KeyDown 事件的字符? 将我的键值转换为字符。
我意识到,如果密钥不是有效的字符,则将其设置为 ASCII 32(空格)。
所以我要过滤掉它....
// If this was not a true char then it will convert to the ASCII Space (#32).
// If this is not really a char, then we are done.
if ((newChar == (char)32) && (e.Key != Key.Space))
return;