textbox J'utilise le code suivant pour vérifier si une date valide a été tapé dans une zone de texte:Valider la date
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;
}
}
Cela fonctionne bien pour les dates qui sont entrées m/j/aa, m/d/aaaa, mm/jj/aa, mm/jj/aaaa. Si un utilisateur entre une date telle que «11/17», la date d'évaluation sera valide, mais, malheureusement, je ne souhaite que les dates comportant les trois parties de date.
Y at-il un moyen facile de faire cela? Je pensais à quelque chose de long les lignes de vérification s'il y a 2 "/" dans la zone de texte, mais je suis sûr qu'il y a un moyen plus propre d'atteindre le résultat souhaité.
EDIT: Merci pour toutes les suggestions tout le monde! J'ai fini en utilisant le code suivant qui accepte M/d/yyyy et M/d/aa ~
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;
}
Nice. J'ai complètement oublié TryParseExact. +1 de moi. –
Le DateTime.TryParseExact() a un remplacement pour accepter plusieurs formats, donc je n'ai pas eu à abandonner la flexibilité de mise en forme. Merci! – Sesame
Excellent. J'avais oublié cette surcharge. Je suis content que ça a marché pour toi. –