Ограничить только английскими буквами - PullRequest
7 голосов
/ 03 декабря 2010

У меня есть Winform с некоторыми полями для редактирования.

Форма может быть загружена и на других языках, например на китайском!Требование состоит в том, что некоторые текстовые поля должны принимать только английские символы для примера. Когда пользователь вводит текст в поле 1, он должен быть на английском языке. А если он вводит текст в поле 2 и 3, то он должен быть на китайском языке?

Возможно ли сделать что-то подобное!

Ответы [ 2 ]

4 голосов
/ 03 декабря 2010

Да, это возможно. Вы можете добавить обработчик события проверки, который проверяет символ. У вас может быть словарь допустимых символов или, если вы ограничите символ определенной кодировкой (возможно, 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 голосов
/ 05 февраля 2016

Для ручного копирования и вставки попробуйте следующее.Возможно, это не лучшее решение, но оно обрежет не-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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...