Hoe puis-je m'assurer qu'un utilisateur ne peut entrer que des caractères alphanumériques et de l'espace dans une zone de texte lors d'un événement KeyDown dans WPF? Aucun caractère spécial autorisé.La zone de texte ne contient que l'alphabet, les chiffres et l'espace
Répondre
Vérifiez l'événement KeyDown de la zone de texte et faire comme
// If escape is presses, then close the window.
if(Key.Escape == e.Key)
{
this.Close();
}
// Allow alphanumeric and space.
if(e.Key >= Key.D0 && e.Key <= Key.D9 ||
e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9 ||
e.Key >= Key.A && e.Key <= Key.Z ||
e.Key == Key.Space)
{
e.Handled = false;
}
else
{
e.Handled = true;
}
// If tab is presses, then the focus must go to the
// next control.
if(e.Key == Key.Tab)
{
e.Handled = false;
}
Espérons que cela aidera ......
Le gestionnaire d'événements KeyDown n'est peut-être pas le meilleur endroit pour cela, car le caractère a déjà été ajouté au TextBox. Vous pouvez répondre à l'événement PreviewKeyDown et empêcher l'événement de se poursuivre, mais cela pourrait avoir des conséquences inconnues.
Une approche consiste à attacher une ValidationRule à la zone de texte. Bien que cela n'empêche pas l'utilisateur d'entrer dans le personnage, il les avertit qu'ils ne sont pas autorisés à le faire. Pour ce faire, vous dérivez de System.Windows.Controls.ValidationRule pour obtenir quelque chose comme ceci:
public class MyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
// Logic to determine if the TextBox contains a valid string goes here
// Maybe a reg ex that only matches alphanumerics and spaces
if(isValidText)
{
return ValidationResult.ValidResult;
}
else
{
return new ValidationResult(false, "You should only enter an alphanumeric character or space");
}
}
}
Et puis utilisez dans XAML comme ceci:
<TextBox>
<TextBox.Text>
<Binding Path="MyString"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<myns:MyValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Chaque fois que l'utilisateur entre un caractère non valide ils obtiendraient le message d'erreur. J'espère que c'est utile.
Vous pouvez également utiliser l'événement PreviewTextInput de la zone de texte.
<TextBox Name="txtName" PreviewTextInput="txtName_PreviewTextInput"/>
Et d'ajouter ce qui suit dans votre code derrière:
private void txtName_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
foreach (char c in e.Text)
{
if (!char.IsLetterOrDigit(c))
{
e.Handled = true;
break;
}
}
}
Je pense que DONOT est une bonne pratique à utiliser KeyDown. L'inconvénient est que vous devrez gérer les touches Backspace, delete et tab aussi.
Au lieu de cela: poignée PreviewTextInput
private void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
if (!IsMatch(e.Text)) e.Handled = true;
}
private bool IsMatch(string input)
{
return Regex.IsMatch(input, MyRegexString);
}
alors doit prendre soin de PasteHandler: ajouter la ligne suivante dans le constructeur.
DataObject.AddPastingHandler(TargetTextBoxName, PasteHandler);
private void PasteHandler(object sender, DataObjectPastingEventArgs e)
{
if (!e.DataObject.GetDataPresent(typeof(string))) return;
// Allow pasting only numeric
var pasteText = e.DataObject.GetData(typeof(string)) as string;
if (!IsMatch(pasteText))
{
e.CancelCommand();
}
}
votre regex sera "^ [a-zA-Z0-9]" – kkk
- 1. réglage du texte dans la zone de texte quand il contient des balises html
- 2. ASP.NET Afficher les éléments sélectionnés de la zone de liste dans la zone de texte
- 3. Besoin d'une regex qui vérifiera si la chaîne ne contient que des lettres az et des chiffres et des traits de soulignement (_) et trait d'union (-)
- 4. Ne pas autoriser le zéro dans la zone de texte
- 5. Afficher les quatre derniers chiffres de SSN
- 6. zone de texte et de compensation HiddenField
- 7. masque pour un chiffre et deux chiffres
- 8. Expression régulière Java pour identifier les chaînes avec plus de chiffres que les non-chiffres
- 9. Jquery agrandissant et réduisant la zone de texte
- 10. Afficher uniquement les numéros dans une zone de texte
- 11. Validation de la zone de texte
- 12. Texte de zone de texte à fractionner avec les conditions
- 13. La séquence ne contient aucun élément?
- 14. Zone de texte HTMl
- 15. Quelle est l'expression sur RegularExpressionValidator pour vérifier si le texte de la zone de texte contient 6 caractères ou plus?
- 16. Comment assainir correctement les données reçues d'une zone de texte, lors de la sortie dans la zone de texte?
- 17. Flex: Modification de la zone de texte
- 18. Nouvelle zone de texte
- 19. focus sur la zone de texte
- 20. WPF CommandParameter dans la zone de texte
- 21. comment puis-je limiter une zone de texte pour afficher 2 chiffres après le point décimal?
- 22. comment faire pour référencer une zone de texte dans le corps de la page html dans un javascript si la zone de texte ne fait partie d'aucun formulaire?
- 23. Liens dans la zone de texte C#
- 24. DataTable.RejectChanges() et les contrôles de la zone de texte du formulaire de rafraîchissement
- 25. Le texte initial ne s'affiche pas dans la zone de texte
- 26. Le code pense que la zone de texte Pied de page Datagrid est vide
- 27. Afficher les données dans une zone de texte
- 28. Besoin d'insérer un 'point' dans la zone de texte où la zone de texte est validée en utilisant javascript pour entrer uniquement les valeurs numériques
- 29. Problème imitant la zone de texte de la fenêtre de sortie VS avec une zone de texte WPF
- 30. regex ne supprime pas les chiffres non de chaîne
BTW, la signature du gestionnaire est: OnKeyDownHandler private void (object sender, KeyEventArgs e) – Jeff