| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
-
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Windows.Forms;
- namespace Dongke.WinForm.Controls
- {
- /// <summary>
- /// 时间控件,该控件用来让用户选择日期和时间并以【HH:mm:ss】格式显示此时间。
- /// </summary>
- [ToolboxBitmap(typeof(DateTimePicker))]
- public class DtpTime : DateTimeBase, ITimeRange
- {
- #region 成员变量
- /// <summary>
- /// 最小时间
- /// </summary>
- private TimeSpan _minTime = Constant.TimeSpanBeginDay;
- /// <summary>
- /// 最大时间
- /// </summary>
- private TimeSpan _maxTime = Constant.TimeSpanEndDay;
- /// <summary>
- /// 正在修改时间
- /// </summary>
- private bool _isSetting = false;
- #endregion
- #region 构造函数
- /// <summary>
- /// 时间控件
- /// </summary>
- public DtpTime()
- {
- base.CustomFormat = Constant.DATETIME_FORMAT_HHMMSS;
- base.ShowUpDown = true;
- }
- #endregion
- #region 属性
- /// <summary>
- /// 获取或设置可在控件中选择的最小时间。
- /// </summary>
- [Description("获取或设置可在控件中选择的最小时间。"), Category("CustomerEx")]
- [DefaultValue(typeof(TimeSpan), "00:00:00"), TypeConverter(typeof(TimeSpanConverter))]
- public TimeSpan MinTime
- {
- get
- {
- return this._minTime;
- }
- set
- {
- TimeSpan ts = new TimeSpan(value.Hours, value.Minutes, value.Seconds);
- if (ts > this._maxTime)
- {
- return;
- }
- this._minTime = ts;
- }
- }
- /// <summary>
- /// 获取或设置可在控件中选择的最大时间。
- /// </summary>
- [Description("获取或设置可在控件中选择的最大时间。"), Category("CustomerEx")]
- [DefaultValue(typeof(TimeSpan), "23:59:59"), TypeConverter(typeof(TimeSpanConverter))]
- public TimeSpan MaxTime
- {
- get
- {
- return this._maxTime;
- }
- set
- {
- TimeSpan ts = new TimeSpan(value.Hours, value.Minutes, value.Seconds);
- if (ts < this._minTime)
- {
- return;
- }
- this._maxTime = ts;
- }
- }
- /// <summary>
- /// 获取或设置分配给控件的时间值。
- /// </summary>
- [Description("获取或设置分配给控件的时间值。"), Category("CustomerEx")]
- [DefaultValue(typeof(TimeSpan?), "")]
- [RefreshProperties(RefreshProperties.All)]
- public new virtual TimeSpan? Value
- {
- get
- {
- if (base.Value.HasValue)
- {
- return base.Value.Value.TimeOfDay;
- }
- return null;
- }
- set
- {
- if (value.HasValue)
- {
- if (base.Value.HasValue)
- {
- base.Value = base.Value.Value.Date + value;
- }
- else
- {
- base.Value = DateTime.Now.Date + value;
- }
- }
- else
- {
- base.Value = null;
- }
- }
- }
- #endregion
- #region 重写属性
- /// <summary>
- /// 获取或设置一个值,该值指示是否使用数值调节钮控件(也称为 up-down 控件)调整日期/时间值。
- /// </summary>
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- [EditorBrowsable(EditorBrowsableState.Never)]
- public new bool ShowUpDown
- {
- get
- {
- return base.ShowUpDown;
- }
- set
- {
- base.ShowUpDown = value;
- }
- }
- /// <summary>
- /// 获取或设置可在控件中选择的最大日期和时间。
- /// </summary>
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- [EditorBrowsable(EditorBrowsableState.Never)]
- public new DateTime MaxDate
- {
- get
- {
- return base.MaxDate;
- }
- set
- {
- base.MaxDate = value;
- }
- }
- /// <summary>
- /// 获取或设置可在控件中选择的最小日期和时间。
- /// </summary>
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- [EditorBrowsable(EditorBrowsableState.Never)]
- public new DateTime MinDate
- {
- get
- {
- return base.MinDate;
- }
- set
- {
- base.MinDate = value;
- }
- }
- #endregion
- #region 重写事件
- /// <summary>
- /// 时间改变
- /// </summary>
- /// <param name="e"></param>
- protected override void OnValueChanged(EventArgs e)
- {
- if (!base.Value.HasValue)
- {
- base.OnValueChanged(e);
- return;
- }
- if (this._isSetting)
- {
- return;
- }
- this._isSetting = true;
- DateTime d = base.Value.Value;
- if (d.TimeOfDay > this._maxTime)
- {
- base.Value = d.Date + this._maxTime;
- }
- else if (d.TimeOfDay < this._minTime)
- {
- base.Value = d.Date + this._minTime;
- }
- else
- {
- base.OnValueChanged(e);
- }
- this._isSetting = false;
- }
- #endregion
- }
- }
|