c# - 在 C# 中进行日期选择器验证的正确方法? (窗体)

标签 c# winforms datepicker

只是无法通过 datepicker 验证获取它。 我有 datepicker Fromdatepicker 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);

如果 result1 意味着 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/

相关文章:

c# - 制作 SqlDataAdapter/Datareader "Really Read-Only"

windows - 为什么我的 MDI 子窗体不显示阴影?

c# - C# 中的 Listview 慢刷新

java - 如何在 Android 中的 WebView 中强制将 DatePicker 用于输入而不是键盘上的 HTML 文本输入

c# - 构建服务器上的 migrate.exe 想要 "start over"进行迁移

c# - Try/Finally 真的是异常安全的吗?

c# - HtmlGenericControl 返回 Null

C# Directory 列出海量目录

java - 如何在 wicket 中使用具有月份和年份增量选项的 DatePicker?

JQuery UI 日期选择器 parseDate 'Missing number at position 6'