Autoriser uniquement les caractères spécifiques dans la zone de texte
Comment puis-je autoriser uniquement certains caractères dans un Visual C# zone de texte? Les utilisateurs devraient être en mesure à l'entrée de la suite de caractères dans une zone de texte, et tout le reste doit être bloqué: 0-9, +, -, /, *, (, ).
J'ai utilisé Google pour rechercher ce problème, mais les seules solutions que je reçois sont en autorisant uniquement les caractères alphabétiques, seulement numériques ou le refus de certains personnages. Ce que je veux, c'est pas en interdisant l'accès de certains personnages, je veux interdire tout par défaut sauf les personnages que j'ai mis dans le code.
source d'informationauteur Annoying Bot
Vous devez vous connecter pour publier un commentaire.
Comme mentionné dans un commentaire (et une autre réponse que j'ai tapé), vous devez créer un gestionnaire d'événements pour attraper le keydown ou événement keypress sur une zone de texte. C'est parce que TextChanged n'est déclenché lorsque la zone de texte perd le focus
Ci-dessous regex vous permet de faire correspondre les caractères que vous souhaitez autoriser
et de ce fait le contraire et les prises de caractères qui ne sont pas autorisés
Je ne suis pas en supposant qu'il y aura un seul match que quelqu'un pourrait coller le texte dans la zone de texte. dans ce cas, attraper textchanged
et de valider une seule touche
Vous devez vous abonner à la
KeyDown
de l'événement sur la zone de texte. Alors quelque chose comme ceci:La chose importante à savoir est que si vous avez modifié le
Handled
propriététrue
il ne traitera pas de la frappe. Le paramètrefalse
volonté.Vous pouvez probablement utiliser la L'événement KeyDownÉvénement KeyPress ou Événement KeyUp. J'essaie tout d'abord de l'événement KeyDown je pense.
Vous pouvez définir la propriété handled de l'événement arguments pour arrêter la manipulation de l'événement.
Pour votre événement de validation de l'OMI, la méthode la plus simple serait d'utiliser un tableau de caractères pour valider zone de texte caractères contre. Vrai - l'itération et la validation n'est pas particulièrement efficace, mais elle est simple.
Vous pouvez également utiliser une expression régulière de votre liste blanche des personnages à l'encontre de la chaîne d'entrée. Vos événements sont disponibles sur le site MSDN ici: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx
Intercepter le KeyPressed événement est à mon avis une bonne solution solide. Attention à déclencher des caractères de code (e.KeyChar inférieure à 32) si vous utilisez une expression régulière.
Mais de cette manière est encore possible d'injecter des caractères en dehors de la plage chaque fois que l'utilisateur coller du texte depuis le presse-papiers. Malheureusement, je n'ai pas trouvé de corriger le presse-papiers événements pour résoudre ce problème.
Donc un imperméable solution est d'intercepter zone de texte.TextChanged. Ici est parfois à l'origine en dehors de la plage de caractères visibles, pour un court laps de temps. Je vous recommande de mettre en œuvre les deux.
using System.Text.RegularExpressions;