KOP_PIbd-33_Volkov_N.A._Tik.../VolkovLabs/WinFormsLibraryVolkov/CustomInputRangeDate.cs

92 lines
3.3 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 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;
}
}
}
}