Перейти к содержимому

Как установить диапазон значение для numericupdown

  • автор:

Как установить диапазон значение для numericupdown

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

Само значение элемента хранится в свойстве Value :

NumericUpDown в Windows Forms

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

Шестнадцатиричные числа в NumericUpDown

Даже если мы в коде установим обычное десятичное значение:

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 в Windows Forms

Список для 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

На этом шаге мы рассмотрим назначение и основные свойства этого компонента .

  1. https://metanit.com/sharp/windowsforms/4.10.php
  2. 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 будет проверяться его десятичное значение.

  1. Выберите в Панели элементов на вкладке Все формы Windows Form элемент управления NumericUpDown и добавьте его на форму.
  2. В окне 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 вбивают. Каков шельмец

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *