Moosa Arbeed Ответов: 3

Как использовать цифровую клавиатуру для замены английских цифр


Я использую приведенный ниже код для замены английских цифр арабскими цифрами во время выполнения, в новой форме мне нужна только цифровая клавиатура, чтобы заменить цифры и сохранить все остальное как есть.

Как реализовать всю идею?

private void ArabicNumbers_KeyPress(object sender, KeyPressEventArgs e)
    {
        switch (e.KeyChar)
        {
            case '0': e.KeyChar = '٠'; break;

            case '1': e.KeyChar = '١'; break;

            case '2': e.KeyChar = '٢'; break;

            case '3': e.KeyChar = '٣'; break;

            case '4': e.KeyChar = '٤'; break;

            case '5': e.KeyChar = '٥'; break;

            case '6': e.KeyChar = '٦'; break;

            case '7': e.KeyChar = '٧'; break;

            case '8': e.KeyChar = '٨'; break;

            case '9': e.KeyChar = '٩'; break;
        }
    }


Что я уже пробовал:

Я попытался преобразовать KeyCode/KeyChar и наоборот, но не смог получить требуемых результатов

3 Ответов

Рейтинг:
9

Moosa Arbeed

Я и сам это понял

private bool _isKeyNumPadClick;

    private void TxtEdtDocNo_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            _isKeyNumPadClick = true;
        }

        else if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            _isKeyNumPadClick = false;
        }
    }


    private void Numbers_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (_isKeyNumPadClick)
        {
            switch (e.KeyChar)
            {
                case '0': e.KeyChar = '٠'; break;

                case '1': e.KeyChar = '١'; break;

                case '2': e.KeyChar = '٢'; break;

                case '3': e.KeyChar = '٣'; break;

                case '4': e.KeyChar = '٤'; break;

                case '5': e.KeyChar = '٥'; break;

                case '6': e.KeyChar = '٦'; break;

                case '7': e.KeyChar = '٧'; break;

                case '8': e.KeyChar = '٨'; break;

                case '9': e.KeyChar = '٩'; break;
            }
        }
        else
        {
            switch (e.KeyChar)
            {
                case '0': e.KeyChar = '0'; break;

                case '1': e.KeyChar = '1'; break;

                case '2': e.KeyChar = '2'; break;

                case '3': e.KeyChar = '3'; break;

                case '4': e.KeyChar = '4'; break;

                case '5': e.KeyChar = '5'; break;

                case '6': e.KeyChar = '6'; break;

                case '7': e.KeyChar = '7'; break;

                case '8': e.KeyChar = '8'; break;

                case '9': e.KeyChar = '9'; break;
            }
        }

        _isKeyNumPadClick = false;
    }


Рейтинг:
0

Maciej Los

Пожалуйста, прочтите это: Ключи Enum (System.Окна.Формы) | Microsoft Docs[^]

Если вы хотите поймать событие нажатия клавиши (клавиша вниз) только для цифровой клавиатуры, вы должны проверить, если е.Код[^] находится между NumPad0 и NumPad9 ;)

private void ArabicNumbers_KeyDown(object sender, KeyPressEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.NumPad0: e.KeyChar = '٠'; break;

            case Keys.NumPad1: e.KeyChar = '١'; break;

            case Keys.NumPad2: e.KeyChar = '٢'; break;

            case Keys.NumPad3: e.KeyChar = '٣'; break;

            case Keys.NumPad4: e.KeyChar = '٤'; break;

            case Keys.NumPad5: e.KeyChar = '٥'; break;

            case Keys.NumPad6: e.KeyChar = '٦'; break;

            case Keys.NumPad7: e.KeyChar = '٧'; break;

            case Keys.NumPad8: e.KeyChar = '٨'; break;

            case Keys.NumPad9: e.KeyChar = '٩'; break;
        }
    }


Moosa Arbeed

ничего не изменилось

0x01AA

Предварительный просмотр ключа формы может помочь. Проверять Свойство Form.KeyPreview (System.Окна.Формы) | Microsoft Docs[^]

0x01AA

А 5. Возможно, вам также следует упомянуть предварительный просмотр ключа ;)

0x01AA

Тем не менее вторая попытка отправить комментарий по этому поводу :-)
Скорее всего, стоит дать OP намек на то, что, возможно, KeyPreview формы имеет отношение к делу ;)
Бруно

Matthew Dennis

тест

Рейтинг:
0

MadMyche

"Английские числа" также известны как Западно-арабские, и то, что вы ищете, - это преобразование в Восточный арабский язык.

Один из вариантов-получить значение и получить соответствующий код UTF, где числа начинаются с U+0660.

Другой вариант-использовать ручное преобразование информации о культуре, как показано здесь:
c# - преобразование чисел из Западно-арабских цифр "1,2,3..." В Восточно - арабские цифры "١, ٢, ٣...." - переполнение стека[^]


Moosa Arbeed

Я не хочу проходить через культуры, я просто хочу заменить числа во время выполнения, используя ту же функцию "используя только ключевые события"
дело в том, что я просто хочу заменить эти цифры с помощью цифровой клавиатуры"
в то время как число в верхней части клавиатуры останется прежним

Maciej Los

5ed!