2012-08-09 32 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; 
     } 
    } 
相關問題