16

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

私は試しましChar.IsLetterたが、charを与える必要があるので、e.key.ToString()[0]ほとんどの場合手紙であるため、機能しません。

4

7 に答える 7

30

このようなことができます:

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 などの修飾キーが押されていないことも確認する必要があります。

于 2013-02-12T14:05:31.377 に答える
11

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

文字か数字かを判断するには、次の操作を実行できる必要があります。

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9;
var isLetter = e.Key >= Key.A && e.Key <= Key.Z;
于 2013-02-12T14:07:26.173 に答える
6

あなたの特定のケースでは、ジョンジェフリーによって提供された答えがおそらく最良ですが、他の文字/数字ロジックについて文字列をテストする必要がある場合は、KeyConverterクラスを使用しSystem.Windows.Input.Keyて a を文字列に変換できます

var strKey = new KeyConverter().ConvertToString(e.Key);

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

于 2013-02-12T14:23:40.793 に答える
4

これを試してください、うまくいきます。

    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
    }
于 2014-06-29T02:54:54.403 に答える
0

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

于 2013-02-12T14:09:14.250 に答える
-1

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

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

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

//
于 2013-02-12T14:05:48.747 に答える