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 = "Введите дату от " + DateTime.MinValue.ToShortDateString() + " до " + DateTime.MaxValue.ToShortDateString(); // 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) { Error = "Диапазон не задан"; return null; } if (dateTimePicker.Value >= MinDate && dateTimePicker.Value <= MaxDate) { return dateTimePicker.Value; } Error = "Введенная дата лежит вне диапазона " + MinDate?.ToShortDateString() + " - " + MaxDate?.ToShortDateString(); return null; } set { if (MinDate == null || MaxDate == null) { Error = "Диапазон не задан"; } if (value.HasValue && value >= MinDate && value <= MaxDate) { dateTimePicker.Value = value.Value; } } } private void dateTimePicker_Enter(object sender, EventArgs e) { ToolTip tt = new ToolTip(); 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; } } } }