ウィンドウにメソッドがあり、押されたキーが文字または数字previewKeyDown
のみであることを知りたい(F1..12、Enter、ctrl、altなどなし-文字または数字のみ)。A-Z
1-0
私は試しましChar.IsLetter
たが、charを与える必要があるので、e.key.ToString()[0]
ほとんどの場合手紙であるため、機能しません。
このようなことができます:
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 などの修飾キーが押されていないことも確認する必要があります。
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;
あなたの特定のケースでは、ジョンとジェフリーによって提供された答えがおそらく最良ですが、他の文字/数字ロジックについて文字列をテストする必要がある場合は、KeyConverterクラスを使用しSystem.Windows.Input.Key
て a を文字列に変換できます
var strKey = new KeyConverter().ConvertToString(e.Key);
修飾キー (Shift、Ctrl、および Alt) が押されているかどうかを確認する必要があります。また、これは文字と数字に対してのみ機能することにも注意してください。特殊文字 (カンマ、引用符など) は、e.Key.ToString()
これを試してください、うまくいきます。
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
}
Microsoft.VisualBasic への参照を追加し、VB の IsNumeric 関数を char.IsLetter() と組み合わせて使用します。
あなたが意図していることを示すためにいくつかのコードを入れることができますか? これはあなたのために働くべきではありません
if(e.key.ToString().Length==1)
`Char.IsLetter(e.key.ToString()[0])`
else
//