我用下面的代碼來檢查有效日期已經被輸入到一個文本框:驗證日期文本框
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;
}
}
這工作正常對於被輸入米日期/ 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;
}
不錯。我完全忘記了TryParseExact。從我+1。 – 2009-11-18 00:19:40
DateTime.TryParseExact()具有覆蓋以接受多種格式,因此我不必放棄格式靈活性。謝謝! – Sesame 2009-11-18 00:46:35
優秀。我忘記了那個過載。我很高興爲你工作。 – 2009-11-18 01:03:31