【发布时间】:2009-11-18 00:04:23
【问题描述】:
我正在使用以下代码检查是否在文本框中输入了有效日期:
public bool ValidateDate(Control ctrl)
{
if (!string.IsNullOrEmpty(ctrl.Text))
{
DateTime value;
if (!DateTime.TryParse(ctrl.Text, out value))
{
return false;
}
}
return true;
}
private void txtStartDate_Validating(object sender, CancelEventArgs e)
{
if (Utils.ValidateDate(txtStartDate))
{
errorProvider.SetError(txtStartDate, "");
}
else
{
errorProvider.SetError(txtStartDate, "* Invalid Date");
e.Cancel = true;
}
}
这适用于输入 m/d/yy、m/d/yyyy、mm/dd/yy、mm/dd/yyyy 的日期。如果用户输入诸如“11/17”之类的日期,这将评估为有效日期,但不幸的是,我只想要包含所有三个日期部分的日期。
有没有简单的方法来做到这一点?我一直在考虑检查文本框中是否有 2 个“/”,但我确信有一种更简洁的方法可以达到预期的结果。
编辑:感谢大家的所有建议!我最终使用了以下代码,它接受 M/d/yyyy 和 M/d/yy ~
public bool ValidateDate(Control ctrl)
{
if (!string.IsNullOrEmpty(ctrl.Text))
{
string[] formats = {"M/d/yyyy", "M/d/yy"};
DateTime value;
if (!DateTime.TryParseExact(ctrl.Text, formats, new CultureInfo("en-US"), DateTimeStyles.None, out value))
{
return false;
}
}
return true;
}
【问题讨论】:
标签: c# winforms validation datetime textbox