ウィンドウにpreviewKeyDown
メソッドがあり、押されたキーは_A-Z
_文字または_1-0
_番号(F1..12なし、enter、ctrl、alt)のみであることを知りたいなど-文字または数字のみ)。
_Char.IsLetter
_を試しましたが、文字を指定する必要があるため、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;
特定のケースでは、 Jon および Jeffery によって提供される答えがおそらく最善ですが、他の文字/数字ロジックについて文字列をテストする必要がある場合は、-を使用できます。 KeyConverter _System.Windows.Input.Key
_を文字列に変換するクラス
_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
//