web-dev-qa-db-ja.com

WPFキーは数字または数字です

ウィンドウにpreviewKeyDownメソッドがあり、押されたキーは_A-Z_文字または_1-0_番号(F1..12なし、enter、ctrl、alt)のみであることを知りたいなど-文字または数字のみ)。

_Char.IsLetter_を試しましたが、文字を指定する必要があるため、e.key.ToString()[0]はほとんどの場合文字であるため、機能しません。

14
user13657

このようなことはします:

if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))

もちろん、要件に応じてCTRLなどの修飾キーが押されていないことも確認する必要があります。

22
Jon

e.KeyはあなたにenumSystem.Windows.Input.Keyのメンバーを与えています

それが文字か数字かを判断するには、次のことができるはずです。

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9;
var isLetter = e.Key >= Key.A && e.Key <= Key.Z;
11
Khan

特定のケースでは、 Jon および Jeffery によって提供される答えがおそらく最善ですが、他の文字/数字ロジックについて文字列をテストする必要がある場合は、-を使用できます。 KeyConverter _System.Windows.Input.Key_を文字列に変換するクラス

_var strKey = new KeyConverter().ConvertToString(e.Key);
_

修飾キー(Shift、Ctrl、Alt)が押されているかどうかを確認する必要があります。また、これは文字と数字に対してのみ機能することにも注意してください。特殊文字(コンマ、引用符など)は、e.Key.ToString()と同じように表示されます。

4
Rachel

これを試してみてください、それは動作します。

    private void txbNumber_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key >= Key.D0 && e.Key <= Key.D9) ; // it`s number
        else if (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ; // it`s number
        else if (e.Key == Key.Escape || e.Key == Key.Tab || e.Key == Key.CapsLock || e.Key == Key.LeftShift || e.Key == Key.LeftCtrl ||
            e.Key == Key.LWin || e.Key == Key.LeftAlt || e.Key == Key.RightAlt || e.Key == Key.RightCtrl || e.Key == Key.RightShift ||
            e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Down || e.Key == Key.Right || e.Key == Key.Return || e.Key == Key.Delete ||
            e.Key == Key.System) ; // it`s a system key (add other key here if you want to allow)
        else
            e.Handled = true; // the key will sappressed
    }
3
Matrix

Microsoft.VisualBasicへの参照を追加し、VB IsNumeric関数をchar.IsLetter()と組み合わせて使用​​します。

0
Mark Green

あなたが意図していることを示すためにいくつかのコードを置くことができますか?これはあなたのために働くべきではありません

      if(e.key.ToString().Length==1)

    `Char.IsLetter(e.key.ToString()[0])`
    else

//
0
Igoy