Vous pouvez soit empêcher toute saisie non numérique, soit simplement filtrer les chiffres dans le texte.
Prévention de la saisie non numérique
Utilisez l'événement BeforeTextChanging
:
Et gérez-le de cette manière :
private void TextBox_OnBeforeTextChanging(TextBox sender,
TextBoxBeforeTextChangingEventArgs args)
{
args.Cancel = args.NewText.Any(c => !char.IsDigit(c));
}
Cette expression LINQ renverra true
et donc Cancel
le changement de texte en cas de rencontre de tout caractère non numérique dans l'entrée.
Filtrage de la saisie non numérique
Utilisez l'événement TextChanging
:
Et gérez-le de cette manière :
private void TextBox_OnTextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
//Sauvegardez la position de la sélection, pour éviter que le curseur ne saute au début
int pos = sender.SelectionStart;
sender.Text = new String(sender.Text.Where(char.IsDigit).ToArray());
sender.SelectionStart = pos;
}
Cette requête LINQ filtrera les caractères non numériques et créera une nouvelle string
uniquement avec les chiffres de l'entrée.
Il est préférable d'utiliser TextChanging
et BeforeTextChanging
, car TextChanged
se produit trop tard, et l'utilisateur serait confus en voyant temporairement des caractères s'afficher à l'écran pour disparaître immédiatement.