2010-12-03 26 views
6

我有一個帶有一些編輯框的Winform。僅限英文字符

表單也可以用其他語言加載,如中文! 要求是某些文本框應該只接受英文字符 例如當用戶鍵入Tex框1時,它應該是英文 而如果他在文本框2和3中鍵入它應該是中文?

是否有可能做這樣的事情!

回答

3

是的,這當然是可以的。您可以添加一個驗證事件處理程序來檢查字符。您可以使用允許字符的字典,或者如果您將字符限制爲某種編碼(可能是UTF-8),則可以使用<>將字符與一系列字符進行比較。

更具體地說:您可以處理KeyPress事件。如果e.KeyChar無效,請將e.Handled設置爲true

試試這個:

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (System.Text.Encoding.UTF8.GetByteCount(new char[] { e.KeyChar }) > 1) 
    { 
     e.Handled = true; 
    } 
} 
+0

個不錯的選擇,但是ID去與允許的字符,而不是一個列表,使用foreach ......如果我們的焦炭等於列表中的任何字符中的,事件設置爲處理和返回,否則將其設置爲false – Machinarius 2010-12-03 03:45:58

0

對於手柄的複製和粘貼,請嘗試以下。它可能不是最好的解決方案,但它會修剪掉非UTF8字符。

private void Control_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Prevent the user from copying text that contains non UTF-8 Characters 
     if (!e.Control || e.KeyCode != Keys.V) 
      return; 

     if (Clipboard.ContainsText() && 
      Clipboard.GetText().Any(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) > 1)) 
     { 
      char[] nonUtf8Characters = 
       Clipboard.GetText().Where(c => System.Text.Encoding.UTF8.GetByteCount(new[] {c}) <= 1).ToArray(); 

      if (nonUtf8Characters.Length > 0) 
      { 
       Clipboard.SetText(new String(nonUtf8Characters)); 
      } 
      else 
      { 
       Clipboard.Clear(); 
      } 

      e.Handled = true; 
     } 
    }