NumericUpDown и использование десятичных значений в C#
Большинство разработчиков знают, что элемент NumericUpDown позволяет пользователю выбирать число, но мало кто знает, что он может обрабатывать десятичные значения в дополнение к целым числам.
Свойство DecimalPlaces элемента управления определяет количество цифр после десятичного знака, которое позволяет элемент управления. Свойство Increment определяет величину изменения значения, когда пользователь нажимает стрелки вверх или вниз. По умолчанию Increment равно 1. Если вы установите DecimalPlaces больше 0, вы можете установить Increment на значение меньше 0, чтобы сделать это проще для пользователя выбирать десятичные значения. Вы также можете изменить Minimum и Maximum, чтобы ограничить значения до разумного диапазона.
Обратите внимание, что этот элемент управления может быть неудобным, если пользователь должен выбрать десятичные значения в большом диапазоне, и элемент управления позволяет много цифр после десятичной точки. Например, если Minimum = 0, Maximum = 1000, DecimalPlaces = 3 и Increment = 0.001, тогда пользователь не может легко выбрать значение 987.654, щелкнув стрелки вверх и вниз. Пользователь все еще может щелкнуть и перетащить, чтобы выбрать значение, а затем ввести новое значение, но клавиши со стрелками не очень полезны.
В этом примере пользователь может выбрать десятичные значения от 0 до 1 с помощью DecimalPlaces = 2. Затем программа рисует эллипс с шириной и высотой, которые равны выбранному числу, умноженному на ширину и высоту формы.
При запуске программы он использует следующий код для подготовки элемента NumericUpDown с именем nudScale.
// Перерисовать по размеру. private void Form1_Load(object sender, EventArgs e) { ResizeRedraw = true; nudScale.Minimum = 0; nudScale.Maximum = 1; nudScale.DecimalPlaces = 2; nudScale.Increment = 0.01m; }
Когда пользователь нажимает кнопку «вверх» или «вниз» элемента управления, следующий код преобразует форму в себя.
// Перерисовать. private void nudScale_ValueChanged(object sender, EventArgs e) { Refresh(); }
Наконец, следующий код показывает, как программа рисует свой эллипс.
// Нарисуем эллипс. private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // Получаем размер эллипса в виде доли // ширина и высота формы. float width = (float)(ClientSize.Width * nudScale.Value); float height = (float)(ClientSize.Height * nudScale.Value); // Рисуем эллипс. float x = (ClientSize.Width - width) / 2; float y = (ClientSize.Height - height) / 2; e.Graphics.DrawEllipse(Pens.Red, x, y, width, height); }