【发布时间】:2010-12-03 03:18:15
【问题描述】:
我有一个带有一些编辑框的 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;
}
}
【讨论】:
List<char>.Contains()。
对于句柄复制和粘贴,请尝试以下操作。它可能不是最好的解决方案,但它会修剪掉非 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;
}
}
【讨论】: