2012-08-09 87 views
2

我有一个事件的文本框,应该在输入一些文本时做事。这很容易检查它是否是字母数字的说明这里Can I determine if a KeyEventArg is an letter or number?识别事件键是文本(不仅是字母数字)

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

这种方法的问题是,我也应手动检查-?!¿[]()Key.OemMinusKey.OemQuestion

是否有某种方式来检查它是否是文本击键或者我应该手动检查(在我看来这不是很优雅)?

+1

你真的想排除没有密钥的所有字符?例如,我的键盘没有“Є”键,但可以证明它仍然是文字。 – Jodrell 2012-08-09 10:28:38

+0

这是一个很好的问题,因为我应该能够使用,例如,触发此事件。我supouse我应该检查,如果这个字符是可打印或类似的。我想排除Ins,箭头,F,Enter,Tab等。 – 2012-08-09 10:32:04

+1

检查文本对抗正则表达式可以是一种解决方案吗? – michele 2012-08-09 10:35:27

回答

1

由于没有其他选项建议我使用下面的代码来允许几乎所有文本按键。不幸的是,这是键盘依赖,所以它不是很优雅。希望在应用程序中不是关键的方面,这只是可用性的问题。

bool isText = (e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) 
      || e.Key == Key.OemQuestion || e.Key == Key.OemQuotes || e.Key == Key.OemPlus || e.Key == Key.OemOpenBrackets || e.Key == Key.OemCloseBrackets || e.Key == Key.OemMinus 
      || e.Key == Key.DeadCharProcessed || e.Key == Key.Oem1 || e.Key == Key.Oem7 || e.Key == Key.OemPeriod || e.Key == Key.OemComma || e.Key == Key.OemMinus 
       || e.Key == Key.Add || e.Key == Key.Divide || e.Key == Key.Multiply || e.Key == Key.Subtract || e.Key == Key.Oem102 || e.Key == Key.Decimal; 
1

这个代码仅允许数字和“”:

private void txtJustNumber_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsDigit((char)(e.KeyChar)) && 
      e.KeyChar != ((char)(Keys.Enter)) && 
      e.KeyChar != (char)(Keys.Delete) && 
      e.KeyChar != (char)(Keys.Back))    
     { 
      e.Handled = true; 
     } 
    } 
相关问题