Ввод только цифр в textBox, с точкой и удалением (C#)
Автор Сообщение
all__ Не на форуме
Админ
*******

Сообщений: 874
Зарегистрирован: 01.2010
Сообщение: #1
Ввод только цифр в textBox, с точкой и удалением (C#)
Задача, обеспечить ввод дробных чисел в textBox.
Я надеялся, что в C# для столь рядовой задачи есть ключ, который берет все заботы по исполнению задачи на себя, но я ошибался.
В бурженете нарыл несколько примеров на эту тему, но все они не поддерживали дробные числа, и даже не позволяли удалять набраные цифры.
В рунете, примеры были другие, но тоже не решали проблемы либо с удалением, либо с дробным числом.
В итоге изысканий и переборов, получился такой пример:

Код:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (textBox1.Text.IndexOf(".") == -1)))
            {
                if (e.KeyChar != (char)Keys.Back)
                {
                    e.Handled = true;
                }
            }
        }

Пример поддерживает:
  • Ввод только чисел и игнорирует другие символы
  • Позволяет ввести только одну точку
  • Отслеживает нажатие BackSpace и стандартно удаляет символы

Пример не поддерживает:
  • Горячие клавиши относящиеся к управлению текстом такие как Ctrl+C, Ctrl+A и др.





Лучшая благодарность - "Мне нравится", +1 или Like! Вверху страницы.
06.07.2010 7:55
Вебсайт Найти все сообщения Цитировать это сообщение
Гость
Unregistered

 
Сообщение: #2
RE: Ввод только цифр в textBox, с точкой и удалением (C#)
Спасибо за пример, но неплохо было бы добавить еще одно условие:

Код:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
    if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (textBox1.Text.IndexOf(".") == -1) && (textBox1.Text.Length != 0))) {
        if (e.KeyChar != (char)Keys.Back) {
            e.Handled = true;
        }
    }
}

А нужно оно для того, чтобы нельзя было ввести точку первым символом.
12.09.2010 15:14
Цитировать это сообщение
all__ Не на форуме
Админ
*******

Сообщений: 874
Зарегистрирован: 01.2010
Сообщение: #3
RE: Ввод только цифр в textBox, с точкой и удалением (C#)
Да полезно.

В своих программах делаю так, если первый символ "точка" или "запятая", то перед точкой добавляется ноль.

Например, вводим

.123
в обработку отсылается
0.123

Что упрощает ввод дробных чисел -1<x<1





Лучшая благодарность - "Мне нравится", +1 или Like! Вверху страницы.
12.09.2010 23:43
Вебсайт Найти все сообщения Цитировать это сообщение
Гость
Unregistered

 
Сообщение: #4
Thumbs Up RE: Ввод только цифр в textBox, с точкой и удалением (C#)
Благодарю. Очень полезный примерSmile
16.05.2011 22:44
Цитировать это сообщение
Гость
Unregistered

 
Сообщение: #5
Ввод только цифр в textBox, с точкой и удалением (C#)
А вот возникает такой вопрос: а как реализовать данный метод на несколько текстбоксов? Например, есть еще textbox2, textbox3 и т.д. которым нужно реализовать тот же самый метод?
17.06.2013 1:00
Цитировать это сообщение
Гость
Unregistered

 
Сообщение: #6
RE: Ввод только цифр в textBox, с точкой и удалением (C#)
(17.06.2013 1:00)Гость писал(а):  А вот возникает такой вопрос: а как реализовать данный метод на несколько текстбоксов? Например, есть еще textbox2, textbox3 и т.д. которым нужно реализовать тот же самый метод?


Ну я бы вообще работал с sender так вроде правильней
Код:
private void filterOnlyReal(object sender, KeyPressEventArgs e)
{
  if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') && (((TextBox)sender).Text.IndexOf(".") == -1) && (((TextBox)sender).Text.Length != 0)))
  {
    if (e.KeyChar != (char)Keys.Back)
    {
      e.Handled = true;
    }
  }
}

а далее подписываешь всех на этот же обработчик
Код:
this.textbox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.filterOnlyReal);
this.textbox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.filterOnlyReal);
this.textbox3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.filterOnlyReal);
06.11.2013 2:27
Цитировать это сообщение
Создать ответ