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; using ToolTip = System.Windows.Forms.ToolTip; namespace WinFormsLibraryVolkov { public partial class CustomInputRangeDate : UserControl { private EventHandler _changeEvent; // Диапазон private string example; // 2 публичных поля для настройки границ диапазона public DateTime MinDate { get; set; } public DateTime MaxDate { get; set; } public CustomInputRangeDate() { InitializeComponent(); } //Ошибка public string Error { get; protected set; } = string.Empty; //Публичное свойство для установки и получения введенного значения(set, get). //При получении проводиться проверка, //если введенное значение не входит в диапазон, возвращать //значение null, а в отдельное поле выводить текст ошибки.При //установке должна проводиться проверка, если передаваемое //значение не входит в диапазон, то не заполнять поле компонента. public DateTime Date { get { if (MinDate == null || MaxDate == null) { throw new ArgumentException("Диапазон не задан"); } if (dateTimePicker.Value >= MinDate && dateTimePicker.Value <= MaxDate) { return dateTimePicker.Value; } throw new ArgumentException($"Введенная дана лежит вне диапазона {MinDate.ToShortDateString()} - {MaxDate.ToShortDateString()}"); } set { if (MinDate == null || MaxDate == null) { Error = "Диапазон не задан"; } if (value >= MinDate && value <= MaxDate) { dateTimePicker.Value = value; } } } private void dateTimePicker_Enter(object sender, EventArgs e) { ToolTip tt = new ToolTip(); example = "Введите дату от " + MinDate.ToShortDateString() + " до " + MaxDate.ToShortDateString(); tt.Show(example, dateTimePicker, 30, -20, 1000); } private void dateTimePicker_ValueChanged(object sender, EventArgs e) { _changeEvent?.Invoke(sender, e); } //Cобытие, вызываемое при смене значения. public event EventHandler ChangeEvent { add { _changeEvent += value; } remove { _changeEvent -= value; } } } }