仅限英语字符

时间:2010-12-03 03:18:15

标签: c# winforms

我有一个带有一些编辑框的Winform。

表格也可以用其他语言加载,就像中文一样! 要求是某些文本框只能接受英文字符 示例当用户在Tex框1中键入时,它应该是英文 如果他输入文本框2和3,它应该是中文?

是否可以做这样的事情!

2 个答案:

答案 0 :(得分:4)

是的,这当然是可能的。您可以添加检查字符的验证事件处理程序。您可以拥有允许字符的字典,或者如果将字符限制为特定编码(可能是UTF-8),则可以使用<>将字符与一系列字符进行比较。< / p>

更具体一点:您可以处理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;
    }
}

答案 1 :(得分: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;
        }
    }