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

I'd do the filtering in KeyPress. At that point you'll deal with characters, and not with keys. So you don't need to care about most of them (AFAIR there are a handful of exceptions, such as return or backspace).

Use e.Handled to supress characters.

于 2012-09-17T17:30:55.113 に答える
0

私はこれを使用しています:指定された KeyDown イベントに適した文字を取得するにはどうすればよいですか? キー値をcharに変換します。

キーが有効な文字でない場合、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;
于 2012-09-17T17:56:00.473 に答える