只是无法通过 datepicker
验证获取它。
我有 datepicker
From 和 datepicker
To,所以我想阻止用户做一些功夫和设置datepicker
从 到大于datepicker
到,我碰到了一些questions但找不到答案,所以我尝试了我能想到的最简单的方法:
在 form_load
事件中为 datepicker
设置 MaxDate
属性
private void Form1_Load(object sender, EventArgs e)
{
datepickerFrom.MaxDate = datepickerFrom.Value;
}
然后对 value_changed
事件做同样的事情
private void datepickerFrom_ValueChanged(object sender, EventArgs e)
{
datepickerFrom.MaxDate = datepickerFrom.Value;
}
这很简单也很好,只有几行代码,我只需要 datepickerFrom_ValueChanged
事件,但最近我尝试在 中输入日期datepicker
开始选择它,然后一切都乱套了。
所以我找到了一些验证解决方案,而不是设置 MaxDate
属性,我试过了。
private void dtFrom_ValueChanged(object sender, EventArgs e)
{
DateTime from = datepickerFrom.Value;
DateTime to = datepickerTo.Value;
int year= from.Year > to.Year ? to.Year : from.Year;
int month = from.Month > to.Month ? to.Month : from.Month;
int day = from.Day > to.Day ? to.Day : from.Day;
int hour = from.Hour > to.Hour ? to.Hour : from.Hour;
int minute = from.Minute > to.Minute ? to.Minute : from.Minute;
int second = from.Second > to.Second ? to.Second : from.Second;
//setting datepicker value
datepickerFrom.Value = new DateTime(year, month, day, hour, minute, second);
}
这工作正常,但感觉有点头疼,而且我还必须为 datepickerTO_ValueChanged
事件执行此操作,当然我可以制作一个 method
并调用它两次,但仍然觉得有一个击球手的方式,所以有什么建议吗?
谢谢你的时间
最佳答案
解决方案一:
您可以处理 datePickerTo
关闭事件并执行如下操作:
private void dateTimePickerTo_CloseUp(object sender, EventArgs e)
{
DateTime fromdate = Convert.ToDateTime(dateTimePickerFrom.Value);
DateTime todate1 = Convert.ToDateTime(dateTimePickerTo.Value);
if (fromdate > todate1)
//Error
}
您还可以使用 DateTime.Compare
获取两个日期
喜欢
int result = DateTime.Compar(dateTimePickerFrom.Value ,dateTimePickerTo.Value);
如果 result
是 1
意味着 From
日期更早,see this link .
注1:
但正如您所说,如果用户输入 From 或 To 文本框,则 closeup
事件永远不会触发,因此您需要在要处理的位置比较它们
例如按钮点击。
注2:
正如@Sinatr 评论的那样,如果 Value 是 DateTime
那么不需要转换它,所以代码如下:
if (dateTimePickerFrom.Value >dateTimePickerTo.Value)
//Error
关于c# - 在 C# 中进行日期选择器验证的正确方法? (窗体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48186209/