Я использую следующий код, чтобы проверить, была ли введена правильная дата в текстовое поле:
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;
}
}
Это прекрасно работает для дат, которые вводятся м / д / гг, м / д / гггг, мм / дд / гг, мм / дд / гггг. Если пользователь вводит дату, такую как «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;
}