Top.Mail.Ru
Уведомления
Очистить все

[Решено] Как на C# сделать ввод hex значений в TextBox?

(@alexcraft)
New member

Приветствую Сообщество! Попробую объяснить, что мне требуется, точнее что хочется сделать...

В приложении с Windows Forms у меня есть поле ввода - обычный TextBox. Я хочу, чтобы пользователь вводил туда шестнадцатеричные значения, то есть символы от 0 до 9, а также A, B, C, D, E, F, либо то же самое маленькими буквами. То есть все остальные символы должны игнорироваться. Как можно настроить подобную фильтрацию? Желательно максимально просто, но оптимально.

Дополнение: получаем допустимые символы (0 - 9, A - F, a - f), остальные не подходят и не должны появляться в TextBox.

Цитата
Создатель темы Размещено : 08.03.2023 16:16
Aveal
(@aveal)
Top level Admin

Можно в обработчике KeyPress() реализовать:

private void MyTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!(char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar) ||
         (e.KeyChar >= 'A' && e.KeyChar <= 'F') || (e.KeyChar >= 'a' && e.KeyChar <= 'f')))
    {
        e.Handled = true;
    }
}
ОтветитьЦитата
Размещено : 08.03.2023 16:49
(@alexcraft)
New member

Спасибо, работает! Только не очень понял как...

ОтветитьЦитата
Создатель темы Размещено : 08.03.2023 17:29
Aveal
(@aveal)
Top level Admin

Тут:

  • char.IsControl(e.KeyChar) - проверяем, является ли символ управляющим (tab, esc и т. д.)
  • char.IsDigit(e.KeyChar) - является ли вводимый символ цифрой от 0 до 9
  • (e.KeyChar >= 'A' && e.KeyChar <= 'F') - от A до F
  • (e.KeyChar >= 'a' && e.KeyChar <= 'f') - от a до f

Если ни одно из этих условий не выполнилось, то попадаем на e.Handled = true, то есть по сути ввод недопустимого символа игнорируется.

ОтветитьЦитата
Размещено : 09.03.2023 13:12
(@alexcraft)
New member

@aveal теперь все понятно, продолжаю ковыряться дальше, скорее всего еще вернусь с вопросами...

ОтветитьЦитата
Создатель темы Размещено : 09.03.2023 17:36
Поделиться: