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 ChubykinaComponents.Exceptions; namespace ChubykinaComponents.Components { public partial class UserDatePicker : UserControl { public UserDatePicker() { InitializeComponent(); } public event Action DateChange; private bool lowBoundrySet = false; private bool highBoundrySet = false; public bool BoundriesSet { get { return lowBoundrySet && highBoundrySet; } } public DateTime? dateFrom { get { return lowBoundrySet ? dateTimePicker.MinDate : null; } set { if (value.HasValue) { dateTimePicker.MinDate = value.Value; lowBoundrySet = true; } } } public DateTime? dateTo { get { return highBoundrySet ? dateTimePicker.MaxDate : null; } set { if (value.HasValue) { dateTimePicker.MaxDate = value.Value; highBoundrySet = true; } } } public DateTime? Value { get { if (!lowBoundrySet || !highBoundrySet) { throw new DateBoundsNotSetException("Date bounds are not set."); } return dateTimePicker.Value; } set { if (lowBoundrySet && highBoundrySet && value.HasValue && value.Value >= dateFrom && value.Value <= dateTo) dateTimePicker.Value = value.Value; } } private void dateTimePicker_ValueChanged(object sender, EventArgs e) { DateChange?.Invoke(dateTimePicker.Value); } } }