StableVersion4.3/HL_FristAidPlatform_Public/Form/TimeControl.cs

305 lines
9.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace HL_FristAidPlatform_Public
{
public partial class TimeControl : UserControl
{
#region 用户自定义属性
#region 私有属性
/// <summary>
/// 日期格式
/// 私有属性根据FormatString_Date产生值
/// </summary>
private string FormatString = "yyyy-MM-dd HH:mm";
/// <summary>
/// 时间
/// 私有属性根据FormatString_Time产生值
/// </summary>
private string EditMask = "HH:mm";
#endregion 私有属性
#region 控件公有属性 调用端使用
/// <summary>
/// 时间文字值
/// </summary>
public string TimeValue
{
get
{
if (string.IsNullOrEmpty(dateEdit.EditValue + ""))
{
return PublicClass.ToString(dateEdit.EditValue, "");
}
else
{
return Convert.ToDateTime(PublicClass.ToString(dateEdit.EditValue, "")).ToString(FormatString);
}
}
set
{
if (string.IsNullOrWhiteSpace(value))
{
dateEdit.EditValue = "";
}
else
{
string time = Convert.ToDateTime(value).ToString(FormatString);
dateEdit.EditValue = time;
}
}
}
/// <summary>
/// 控件输入框中日期+时间 格式
/// </summary>
[DefaultValue(typeof(DateFormat), "yyyyMMddHHmm")]
private DateFormat formatString_Date;
public DateFormat FormatString_Date
{
get
{
return formatString_Date;
}
set
{
switch (value)
{
case DateFormat.yyyyMM:
FormatString = "yyyy年MM月";
break;
case DateFormat.yyyyMMdd:
FormatString = "yyyy-MM-dd";
break;
case DateFormat.yyyyMMddHHmm:
FormatString = "yyyy-MM-dd HH:mm";
break;
case DateFormat.yyyyMMddHHmmss:
FormatString = "yyyy-MM-dd HH:mm:ss";
break;
default:
FormatString = "yyyy-MM-dd HH:mm";
break;
}
formatString_Date = value;
ChangeFormatString();
}
}
/// <summary>
/// 控件点开后时钟下输入框中的 格式
/// </summary>
[DefaultValue(typeof(TimeFormat), "HHmm")]
private TimeFormat formatString_Time;
public TimeFormat FormatString_Time
{
get
{
return formatString_Time;
}
set
{
switch (value)
{
case TimeFormat.HHmm:
EditMask = "HH:mm";
break;
case TimeFormat.HHmmss:
EditMask = "HH:mm:ss";
break;
default:
EditMask = "HH:mm";
break;
}
formatString_Time = value;
}
}
/// <summary>
/// 是否显示时钟
/// </summary>
public DevExpress.Utils.DefaultBoolean defaultBoolean { get; set; }
/// <summary>
/// 日期格式化枚举
/// </summary>
public enum DateFormat
{
yyyyMM = 1,
yyyyMMdd = 2,
yyyyMMddHHmm = 3,
yyyyMMddHHmmss = 4,
}
/// <summary>
/// 时间格式化枚举
/// </summary>
public enum TimeFormat
{
HHmm = 0,
HHmmss = 1,
}
#endregion 控件公有属性 调用端使用
#endregion 用户自定义属性
#region 用户自定义事件
/// <summary>
/// 定义委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void TimeChanged(object sender, EventArgs e);
/// <summary>
/// 定义事件
/// </summary>
public event TimeChanged TimeValueChanged;
#endregion 用户自定义事件
/// <summary>
/// 用户自定义控件-时间控件
/// </summary>
public TimeControl()
{
InitializeComponent();
}
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TimeControl_Load(object sender, EventArgs e)
{
ChangeFormatString();
dateEdit.EditValue = TimeValue;
}
/// <summary>
/// 显示格式改变后
/// </summary>
private void ChangeFormatString()
{
#region 时间显示格式
//设置Mask.EditMask和DisplayFormat,EditFormat属性。设置为一致TimeToString; //依照想要的显示格式设置此字符串。
this.dateEdit.Properties.DisplayFormat.FormatString = FormatString;
this.dateEdit.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
this.dateEdit.Properties.EditFormat.FormatString = FormatString;
this.dateEdit.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
this.dateEdit.Properties.Mask.EditMask = FormatString;
//假设要显示时间须要设置VistaDisplayMode=true, VistaEditTime=true。意思为显示时间。在日期控件中会出现时钟图标并能够编辑时间。
this.dateEdit.Properties.VistaDisplayMode = defaultBoolean;
this.dateEdit.Properties.VistaEditTime = defaultBoolean;
//设置时间部分的格式,时间部分指的是打开日期控件后,在时钟图标下的显示的日期格式。
this.dateEdit.Properties.VistaTimeProperties.DisplayFormat.FormatString = EditMask;
this.dateEdit.Properties.VistaTimeProperties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
this.dateEdit.Properties.VistaTimeProperties.EditFormat.FormatString = EditMask;
this.dateEdit.Properties.VistaTimeProperties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
this.dateEdit.Properties.VistaTimeProperties.Mask.EditMask = EditMask;
//年月时仅显示月份
if (FormatString == "yyyy年MM月")
{
this.dateEdit.Properties.VistaCalendarInitialViewStyle = DevExpress.XtraEditors.VistaCalendarInitialViewStyle.YearView;
this.dateEdit.Properties.VistaCalendarViewStyle = DevExpress.XtraEditors.VistaCalendarViewStyle.YearView;
}
if (FormatString == "yyyy")
{
this.dateEdit.Properties.VistaCalendarInitialViewStyle = DevExpress.XtraEditors.VistaCalendarInitialViewStyle.YearView;
this.dateEdit.Properties.VistaCalendarViewStyle = DevExpress.XtraEditors.VistaCalendarViewStyle.YearView;
}
#endregion 时间显示格式
}
/// <summary>
/// 控件关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DateEdit_Closed(object sender, DevExpress.XtraEditors.Controls.ClosedEventArgs e)
{
try
{
if (PublicClass.ToString(dateEdit.EditValue, "") == "")
{
dateEdit.EditValue = DateTime.Now.ToString(FormatString);
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog("时间用户控件", "给指定时间控件为空时赋值当前时间:\r\n" + ex);
}
}
/// <summary>
/// 控件点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DateEdit_Click(object sender, EventArgs e)
{
try
{
if (PublicClass.ToString(dateEdit.EditValue, "") == "")
{
dateEdit.EditValue = DateTime.Now.ToString(FormatString);
}
else
{
dateEdit_EditValueChanged(sender, e);
}
}
catch (Exception ex)
{
PublicClass.WriteErrorLog("时间用户控件", "给指定时间控件为空时赋值当前时间:\r\n" + ex);
}
}
/// <summary>
/// 时间控件更改事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dateEdit_EditValueChanged(object sender, EventArgs e)
{
//if (TimeValueChanged != null)
// TimeValueChanged(sender, new EventArgs());//把控件自身作为参数传递
TimeValueChanged?.Invoke(sender, new EventArgs());//把控件自身作为参数传递
}
/// <summary>
/// 更改控件颜色
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TimeControl_ForeColorChanged(object sender, EventArgs e)
{
dateEdit.ForeColor = ForeColor;
}
}
}