@mrFrip
Преодолеваю прокрастинацию

Обработчик ввода в TextBox через событие KeyPress?

Есть некий TextBox. В него должны вводиться числа (целые, либо с плавающей точкой) разделенные пробелами.

Примерно такого формата:

10 11,2 6 3 5 6,11


Так же, я пытался использовать ниженаписанный код, который позволяет ввести в TextBox только числа, и в случае чего заменяет разделитель на нужный.
spoiler
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            // Правильными символами считаются цифры,
            // запятая, <Enter> и <Backspace>.
            // Будем считать правильным символом
            // также точку, на заменим ее запятой.
            // Остальные символы запрещены.
            // Чтобы запрещенный символ не отображался 
            // в поле редактирования,присвоим 
            // значение true свойству Handled параметра e
 
            if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
            {
                // цифра
                return;
            }
 
            if (e.KeyChar == '.')
            {
                // точку заменим запятой
                e.KeyChar = ',';
            }
 
            if (e.KeyChar == ',')
            {
                TextBox textBox = sender as TextBox;
                if (textBox.Text.IndexOf(',') != -1)
                {
                    // запятая уже есть в поле редактирования
                    e.Handled = true;
                }
                return;
            }
 
            if (  Char.IsControl (e.KeyChar) )
            {
                // <Enter>, <Backspace>, <Esc>
                if ( e.KeyChar == (char) Keys.Enter)
                    // нажата клавиша <Enter>
                    // установить курсор на кнопку OK
                    button1.Focus(); 
                return;
            }
 
            // остальные символы запрещены
            e.Handled = true;
        }



но у меня совершенно не получается задать ему логику, чтобы между пробелами можно было вводить только числа, чтобы был только 1 разделитель.

Возможно ли это сделать через обработчик событий, дабы не вызывать ошибку/повторный ввод для пользователя.

За любые наводки буду очень благодарен.

Спасибо!
  • Вопрос задан
  • 625 просмотров
Пригласить эксперта
Ответы на вопрос 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
В событии KeyPress анализируйте содержимое textBox
Получаете из него строковый массив, разбив содержимое через Split. Разделитель - пробел.
Далее - проверяете каждый элемент массива на IsNumeric.
Если хотя бы один элемент массива не соответствует условию, то рядом с текстовым полем выводите errorProvider с сообщением об ошибке.
Не забудьте про обработку Ctrl+V
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы