Богданов Игорь Олегович (bogdan_63) wrote,
Богданов Игорь Олегович
bogdan_63

Category:
  • Mood:

Опасный фонарик

Продолжаем разговор о вводе чисел в TextBox. Сегодня будем вводить отрицательные числа, тобишь к числу (точнее строке) надо будет пририсовывать знак "минус".

Главное


Раз уж мы будем что-то в TextBox добавлять, то изменится длина строки в TextBox, а, соответственно текстовый курсор (|) перепрыгнет с позиции, на которой он находился, на следующую или предыдущую, что создаст неудобство пользователю. Это надо побороть.

Позицию курсора можно вытащить из свойства TextBox.SelectionStart, посему сохраним его перед началом всех действий с текстом в отдельную переменную:

int pos = txt.SelectionStart;

Теперь можно вводить знак числа.

Ввод знака числа


Смотрим, какой символ был введен. Если минус, то проверяем, был ли в начале строки минус. Был - убираем, не было - добавляем. В зависимости от того, убрали или добавили символ, корректируем местоположение текстового курсора, добавляя или удаляя позицию, если, соответственно, убрали или добавили символ.

//ввод минуса
if (e.KeyChar == '-')
{
if (txt.Text.StartsWith("-"))
{
txt.Text = txt.Text.Substring(1);
txt.SelectionStart = pos - 1;
}
else
{
txt.Text = "-" + txt.Text;
txt.SelectionStart = pos + 1;
}

e.Handled = true;
return;
}



Дополнительно. Добавление лидирующего ноля.


Таким же образом можно добавлять лидирующий ноль, если пользователь начал ввод дробного числа с точки:

//ввод точки (запятой)
if ((txt.Text.StartsWith(".")) || (txt.Text.StartsWith(",")))
{
// добавление лидирующего ноля
txt.Text = "0" + txt.Text;
txt.SelectionStart = pos + 1;
}

if ((e.KeyChar == '.') || (e.KeyChar == ','))
{
if (txt.Text.Contains(".") || txt.Text.Contains(","))
{
e.Handled = true;
return;
}

return;
}



Вся функция целиком


На PasteBin

Дополнительно


1. Ввод в текстовое поле только цифр Копия
2. Ввод дробных чисел в текстовое поле Копия

Общий пример для всех заметок


- Ввод цифр
- Ввод чисел с дробной частью
- Ввод отрицательных чисел с дробной частью и добавление лидирующего ноля
- Дополнительно - пример конверсии вводимых строк в числа, обработка ошибок при конвертации.

На GitHub

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/09/18/c-vvod-otritsatelnyh-chisel-v-textbox/
Tags: csharp, it
Tags: юмор
Subscribe
promo bogdan_63 december 1, 2021 13:42 964
Buy for 200 tokens
Очень рад, что вы заглянули в мой блог! Надеюсь, вам будут интересны мои записи. Предлагаю для начала посмотреть разделы: Мой сайт СССР Россия Медицина Медицинские байки Юмор Образование История Культура Буду рад всем новым друзьям. Присоединяйтесь, пообщаемся!…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments