我有一個帶有一些編輯框的Winform。僅限英文字符
表單也可以用其他語言加載,如中文! 要求是某些文本框應該只接受英文字符 例如當用戶鍵入Tex框1時,它應該是英文 而如果他在文本框2和3中鍵入它應該是中文?
是否有可能做這樣的事情!
我有一個帶有一些編輯框的Winform。僅限英文字符
表單也可以用其他語言加載,如中文! 要求是某些文本框應該只接受英文字符 例如當用戶鍵入Tex框1時,它應該是英文 而如果他在文本框2和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;
}
}
對於手柄的複製和粘貼,請嘗試以下。它可能不是最好的解決方案,但它會修剪掉非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;
}
}
個不錯的選擇,但是ID去與允許的字符,而不是一個列表,使用foreach ......如果我們的焦炭等於列表中的任何字符中的,事件設置爲處理和返回,否則將其設置爲false – Machinarius 2010-12-03 03:45:58