Как установить диапазон значение для numericupdown
Элемент NumericUpDown представляет пользователю выбор числа из определенного диапазона. Для определения диапазона чисел для выбора NumericUpDown имеет два свойства: Minimum (задает минимальное число) и Maximum (задает максимальное число).
Само значение элемента хранится в свойстве Value :

По умолчанию элемент отображает десятичные числа. Однако если мы установим его свойство Hexadecimal равным true , то элемент будет отображать все числа в шестнадцатеричной системе.

Даже если мы в коде установим обычное десятичное значение:
numericUpDown1.Value = 66;
то элемент все равно отобразит его в шестнадцатиричной системе.
Если мы хотим отображать в поле дробные числа, то можно использовать свойство DecimalPlaces , которое указывает, сколько знаков после запятой должно отображаться. По умолчанию это свойство равно нулю.
Также можно задать отображение тысячного разделителя. Для этого для свойства ThousandsSeparator надо установить значение true . Например, numericUpDown при Value=1000,03 , DecimalPlaces=2 и ThousandsSeparator=true :

При этом надо учитывать, что если мы устанавливаем значение для свойства Value в окне свойств, то там в качестве разделителя цеой и дробной части используется запятая. Если же мы устанавливаем данное свойство в коде, тогда в качестве разделителя используется точка.
По умолчанию при нажатии на стрелочки вверх-вниз на элементе значение будет увеличиваться, либо уменьшаться на единицу. Но с помощью свойства Increment можно задать другой шаг приращения, в том числе и дробный.
При работе с NumericUpDown следует учитывать, что его свойство Value (как и свойства Minimum и Maximum ) хранит значение decimal. Поэтому в коде мы также должны с ним работать как с decimal, а не как с типом int или double.
DomainUpDown
Элемент DomainUpDown предназначен для ввода текстовой информации. Он имеет текстовое поле для ввода строки и две стрелки для перемещения по списку строк:

Список для DomainUpDown задается с помощью свойства Items . Список можно сразу упорядочить по алфавиту. Для этого надо свойству Sorted присвоить значение true .
Чтобы можно было циклично перемещаться по списку, то есть при достижении конца или начала списка его просмотр начинался с первого или последнего элемента, надо установить для свойства Wrap значение true .
В коде выбранное значение в DomainUpDown доступно через свойство Text. Например, добавим программно список строк в DomainUpDown и обработаем изменение выбора в списке:
public partial class Form1 : Form < public Form1() < InitializeComponent(); Liststates = new List < "Аргентина", "Бразилия", "Венесуэла", "Колумбия", "Чили" >; // добавляем список элементов domainUpDown1.Items.AddRange(states); domainUpDown1.TextChanged += domainUpDown1_TextChanged; > // обработка изменения текста в элементе void domainUpDown1_TextChanged(object sender, EventArgs e) < MessageBox.Show(domainUpDown1.Text); >>
Для обработки изменения текста здесь таке, как и для элемента TextBox, можно использовать событие TextChanged , в обработчике которого мы выводим выбранный текст в сообщение.
Как установить диапазон значение для numericupdown
На этом шаге мы рассмотрим назначение и основные свойства этого компонента .
- https://metanit.com/sharp/windowsforms/4.10.php
- https://studfile.net/preview/7124448/page:37/
Элемент управления NumericUpDown представляет собой сочетание текстового поля и пары кнопок со стрелками для выбора значения пользователем.
Рис.1. Компонент NumericUpDown на форме в режиме создания приложения
Он выводит и задает отдельное числовое значение в списке вариантов фиксированных числовых значений. Пользователь может увеличивать и уменьшать число, нажимая кнопки со стрелками вверх и вниз или клавиши со стрелками ВВЕРХ и ВНИЗ , а также вводя число в области текстового поля элемента управления. При нажатии клавиши со стрелкой ВВЕРХ число увеличивается до максимума; при нажатии клавиши со стрелкой ВНИЗ число уменьшается до минимума.
Свойства этого компонента представлены на рисунке 2.
Рис.2. Свойства компонента NumericUpDown
- Minimum — задает минимальное число (значение по умолчанию – 0),
- Maximum — задает максимальное число (значение по умолчанию – 100) и
- Increment — шаг приращения (значение по умолчанию – 1).
Само значение элемента хранится в свойстве Value .
По умолчанию элемент отображает десятичные числа. Однако если мы установим его свойство Hexadecimal равным True , то элемент будет отображать все числа в шестнадцатеричной системе (рисунок 3).
Рис.3. В свойстве Value задано десятичное значение 78
Если мы хотим отображать в поле дробные числа, то можно использовать свойство DecimalPlaces , которое указывает, сколько знаков после запятой должно отображаться. По умолчанию это свойство равно нулю.
Также можно задать отображение тысячного разделителя. Для этого для свойства ThousandsSeparator надо установить значение True . Например, numericUpDown при Value=1000,03, DecimalPlaces=2 и ThousandsSeparator=True (рисунок 4):
Рис.4. Вид компонента с разделителями тысяч
Примечание . Даже в том случае, если значение элемента управления NumericUpDown отображается в шестнадцатеричном формате, в любых проверках для свойства Value будет проверяться его десятичное значение.
- Выберите в Панели элементов на вкладке Все формы Windows Form элемент управления NumericUpDown и добавьте его на форму.
- В окне Properties ( Свойства ) элемента управления NumericUpDown установите свойства Value, Maximum, Minimum и Increment .
Прочитать заданное значение можно, например, так:
private: System::Void numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e) < double x = Convert::ToDouble(numericUpDown1->Value); >
На следующем шаге мы рассмотрим компонент DomainUpDown .
Проверить и обновить значение у NumericUpDown после каждого введенного с клавиатуры символа
Пользователь вводит число в NumericUpDown с клавиатуры, но проверка этого числа на соответствие нижней и верхней границам происходит только после смены фокуса с numeric’а. Как я могу совершать эту встроенную проверку после каждого введенного символа? Я хотел бы написать что-то вроде:
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
Но метод ValidateEditText() защищенный, а не публичный.
Отслеживать
задан 18 июл 2020 в 16:06
1,899 1 1 золотой знак 7 7 серебряных знаков 21 21 бронзовый знак
Откажитесь от таких проверок. Они только мешают пользователю. Во когда фокус меняется, тогда и нужно проверять итоговое значение.
18 июл 2020 в 17:33
Юзер может вставить значение с помощью мышки. Упс, ваш метод обойдён.
18 июл 2020 в 17:34
А почему они могут помешать? В моем конкретном случае ограничение на максимальное значение всего 20, и если пользователь начинает вводить миллионы, то мне хотелось бы, чтобы он сразу увидел, что максимальное значение он никак не превысит.
18 июл 2020 в 17:35
Потому что распространённый и привычный способ работы — это когда юзер копирует значение откуда-то, захватывая при этом лишние символы и вставляет грязное значение в поле ввода. Потом по месту удаляет лишнее. А если вы и вставки ему ограничите и прочие драконовские меры предпримите, то кому это понравится?
18 июл 2020 в 17:37
Но если вам очень хочется, то используйте событие TextChanged .
18 июл 2020 в 17:39
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
У NumericUpDown есть метод Validate, его и надо вызывать.
Так как пользователь может изменять значения не только с клавиатуры, но и с помощью мышки, то лучше обрабатывать событие TextChanged . Кстати, в дизайнере оно скрыто у этого контрола. Поэтому сделаем это вручную, например, в событии Load формы.
numericUpDown1.TextChanged += NumericUpDown1_TextChanged;
Код в обработчике события:
private void NumericUpDown1_TextChanged(object sender, EventArgs e) < if (numericUpDown1.Value < numericUpDown1.Minimum || numericUpDown1.Value >numericUpDown1.Maximum) numericUpDown1.Validate(); >
Как установить диапазон значение для numericupdown
Сорри за банальный вопрос, но как ограничить диапазон вводимых значений в поле типа NumericUpDown? Ставлю maximum и minimum — но они не действуют на значения вводимые вручную.
Re: Ограничение диапазона в NumericUpDown
| От: | Unforgiver |
| Дата: | 19.07.05 05:24 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Сорри за банальный вопрос, но как ограничить диапазон вводимых значений в поле типа NumericUpDown? Ставлю maximum и minimum — но они не действуют на значения вводимые вручную.
А>Спасибо
Они всё равно не принимаются.
Всё, что больше максимума, равно максимуму, что меньше минимума — минимуму.
Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.
Re[2]: Ограничение диапазона в NumericUpDown
| От: | Аноним |
| Дата: | 19.07.05 06:26 |
| Оценка: |
Здравствуйте, Unforgiver, Вы писали:
U>Здравствуйте, Аноним, Вы писали:
А>>Сорри за банальный вопрос, но как ограничить диапазон вводимых значений в поле типа NumericUpDown? Ставлю maximum и minimum — но они не действуют на значения вводимые вручную.
А>>Спасибо
U>Они всё равно не принимаются.
U>Всё, что больше максимума, равно максимуму, что меньше минимума — минимуму.
Не совсем понял, что значит не принимаются? Даже если так — для пользователя это уж точно не очевидно. Нужно запретить именно ввод неверных зачений, я просто думал, что есть стандартные свойства у этого контрола, позволяющие добиться подобного эффекта
Re[3]: Ограничение диапазона в NumericUpDown
| От: | xexe2 |
| Дата: | 19.07.05 06:36 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Не совсем понял, что значит не принимаются?Даже если так — для пользователя это уж точно не очевидно. Нужно запретить именно ввод неверных зачений, я просто думал, что есть стандартные свойства у этого контрола, позволяющие добиться подобного эффекта
. n.Maximum=100; n.Minimum=0; n.ValueChanged += new EventHandler(n_ValueChanged); . void n_ValueChanged(object sender, EventArgs e) < if(n.Value>n.Maximum || n.Value < n.Minimum) n.Value >n.Maximum ? n.Value = n.Maximum : n.Value = n.Minimum; >
ну вроде и все:)
Ограничение диапазона в NumericUpDown
| От: | Аноним |
| Дата: | 18.07.05 19:22 |
| Оценка: |
using System; using System.Windows.Forms; namespace WinTest < public class MyNumericControl : NumericUpDown < protected override void OnTextChanged(EventArgs e) < ValidateEditText(); base.OnTextChanged(e); > > >
а вообще numeric не любит када в него величины как в textbox вбивают. Каков шельмец