PIbd-31_Belianin.N.N_COP_8/Lab 1/Belianin_1/MyCustomComponents/CustomInputRangeNumber.cs
2024-10-21 02:08:06 +04:00

123 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using MyCustomComponents.Extensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyCustomComponents
{
public partial class CustomInputRangeNumber : UserControl
{
// Диапазон
private string example = "Введите значение от " + decimal.MinValue + " до " + decimal.MaxValue;
// В случае ошибки
public string Error { get; protected set; } = string.Empty;
// Создам 2 публичных поля для настройки границ диапазона
public decimal? MinValue { get; set; } = null;
public decimal? MaxValue { get; set; } = null;
/* Публичное свойство для установки и получения введённого значения (set, get). При получении проводится проверка,
Если введённое значение не входит в диапозон, возвращать значение null, а в отдельное поле выводить текст ошибки.
При установке должна проводиться проверка, если передаваемое значение не входит в диапозон, то не заполнять поле компонента.
*/
public decimal? Value
{
get
{
// Как мы проверим что программист не забыл задать минимальное, максимальное значение?
// Проверка, что MinValue и MaxValue задан
if (!MinValue.HasValue || !MaxValue.HasValue)
{
throw new RangeException("MinValue и MaxValue должны быть заданы.");
}
// Проверяем, что max не может быть min
if (MaxValue.Value <= MinValue.Value)
{
throw new RangeException("MaxValue должно быть больше MinValue");
}
decimal currentValue = numericUpDown.Value;
// Проверка, что значение в диапазоне
if (currentValue < MinValue.Value || currentValue > MaxValue.Value)
{
throw new RangeException($"Введённое значение {currentValue} лежит вне диапазона {MinValue.Value} - {MaxValue.Value}.");
}
return currentValue;
}
set
{
// Проверка, что MinValue и MaxValue заданы
if (!MinValue.HasValue || !MaxValue.HasValue)
{
Error = "MinValue и MaxValue должны быть заданы.";
return;
}
// Проверка, что MinValue меньше MaxValue
if (MinValue.Value >= MaxValue.Value)
{
Error = "Диапазон неверен. MinValue должен быть меньше, чем MaxValue.";
return;
}
// Если число верно в диапозоне, то значение устанавливается
if (value.HasValue && value.Value >= MinValue.Value && value.Value <= MaxValue.Value)
{
numericUpDown.Value = value.Value;
// Очистить ошибку, если значение установлено успешно
Error = null;
}
else
{
Error = $"Значение должно быть в диапазоне от {MinValue.Value} до {MaxValue.Value}.";
}
}
}
public CustomInputRangeNumber()
{
InitializeComponent();
}
private void numericUpDown_Enter(object sender, EventArgs e)
{
ToolTip toolTip = new ToolTip();
toolTip.Show(example, numericUpDown, 30, -20, 1000);
}
private void numericUpDown_ValueChanged(object sender, EventArgs e)
{
_changeEvent?.Invoke(sender, e);
}
private EventHandler _changeEvent;
// Событие, вызываемое при смене значения
public event EventHandler ChangeEvent
{
add
{
_changeEvent += value;
}
remove
{
_changeEvent -= value;
}
}
}
}