我的窗口中有previewKeyDown
方法,我想知道按下的键只有A-Z
个字母或1-0
个数字(没有anyF1..12,输入,ctrl ,alt等 - 只是字母或数字)。
我已经尝试了Char.IsLetter
,但我需要提供字符,因此e.key.ToString()[0]
不起作用,因为几乎每次都是字母。
答案 0 :(得分:21)
这样的事情会:
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等修饰键。
答案 1 :(得分: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;
答案 2 :(得分:4)
在您的具体情况下,Jon和Jeffery提供的答案可能是最好的,但是如果您需要测试字符串中的其他字母/数字逻辑,那么您可以使用{{3} } class将System.Windows.Input.Key
转换为字符串
var strKey = new KeyConverter().ConvertToString(e.Key);
您仍然需要检查是否按下任何修改键(Shift,Ctrl和Alt),还应注意这只适用于字母和数字。特殊字符(例如逗号,引号等)将显示为与e.Key.ToString()
答案 3 :(得分:3)
试试这个,它有效。
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
}
答案 4 :(得分:0)
你能放一些代码来展示你的意图吗?这不应该对你有用
if(e.key.ToString().Length==1)
`Char.IsLetter(e.key.ToString()[0])`
else
//
答案 5 :(得分:0)
添加对Microsoft.VisualBasic的引用,并使用VB IsNumeric函数,结合char.IsLetter()。
答案 6 :(得分:0)
有点混乱,但是可以用:)
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
Regex R = new Regex("^([A-Z]|[0-9]){1}$");
var strKey = new KeyConverter().ConvertToString(e.Key);
if(strKey.Length > 1 )
{
strKey = strKey.Replace("NumPad", "").Replace("D", "");
}
if (strKey.Length == 1)
{
if (!R.IsMatch(strKey))
{
e.Handled = true;
}
}
else
{
e.Handled = true;
}
}