2017-06-09 4 views
2

J'ai toujours eu des problèmes avec le système. J'ai une application dans laquelle je relai sur DateTimePicker valeurs pour beaucoup de calculs. Les dates sont généralement saisies dans ces commandes et les utilisateurs tapent des jours ou des mois à un seul chiffre sans les zéros en tête (c'est-à-dire 9/9/17 ou 10/6/17) et les contrôles terminent la date.La valeur de DateTimePicker n'est pas mise à jour lors de la saisie d'un nombre à un chiffre.

Cependant, lorsque cela se produit dans Validating, Validated, Leave, ValueChanged, etc événements, la DateTimePicker.Value reflète la valeur de prévisualisation, avant la mise à jour.

Par exemple, le contrôle définit la date sur DateTime.Today (06/09/2017) et l'utilisateur tape la valeur pour prévisualiser le mois sans les zéros en tête (5/09/2017). Dans ce cas, dans les événements prévisualisés, le DateTimePicker.Value sera toujours le 06/09/2017, même s'il a été modifié. Il est important de préciser que si l'utilisateur tape la date avec des zéros en tête (05/09/2017), la valeur est correctement mise à jour dans l'événement.

La valeur est mise à jour correctement, et si je valide la valeur après ces événements (c'est-à-dire lorsque l'utilisateur clique sur un bouton), je peux voir la valeur mise à jour. Mais ce n'est pas ce qui est requis.

Dans l'exemple suivant, une autre commande dépendant de la valeur correcte est mal mise à jour.

private void nochesFormattedTextBox_Leave(object sender, EventArgs e) 
{ 
    fechaFinDateTimePicker.Value = fechaDateTimePicker.Value.AddDays(nochesFormattedTextBox.Text != "" ? int.Parse(nochesFormattedTextBox.Text) : 0); 
} 

Une aide?

Répondre

0

C'est tout à fait normal: ces événements sont déclenchés AVANT que la valeur réelle ne soit mise à jour dans le contrôle. Je recommande que vous utilisiez Change event ou, event better: Validated. Validated est déclenché après l'événement Validating et vous êtes toujours sûr que vos données sont valides. Vous n'avez pas besoin de mettre en œuvre la validation en passant ... Validated est TOUJOURS viré. Le problème avec le changement est que la valeur pourrait être erronée, parce que les données ne pourraient pas être valides. Alors je pense que vous devriez utiliser Validated.

+0

Cela arrive également avec l'événement 'Validated' également. Cependant, la solution utilisait l'événement 'ValueChanged'. Merci! –