0

我有一个 PreviewKeyDown 事件,我用它来过滤我的输入(我需要过滤掉其他东西中的空格,所以使用 PreviewKeyPress 不可用)。

一切正常,除了它吃掉了我的 Delete、Backspace、Home、Arrow、Page Up 等按键。

我可以试着想想我认为应该允许的所有键,并告诉我的事件忽略它们:

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))

但我相信我会错过一些。

有没有更好的方法来做一个巨大的“或”声明并希望我得到它们?

4

2 回答 2

0

我会在KeyPress. 那时您将处理字符,而不是键。所以你不需要关心它们中的大多数(AFAIR 有少数例外,例如返回或退格)。

用于e.Handled抑制字符。

于 2012-09-17T17:30:55.113 回答
0

我正在使用这个:你如何获得适合给定 KeyDown 事件的字符?将我的键值转换为字符。

我意识到如果密钥不是有效的字符,那么它被设置为 ASCII 32 (SPACE)。

所以我只是要过滤掉那个......

// 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;
于 2012-09-17T17:56:00.473 回答