C# - la Désactivation de la Saisie au Clavier dans une zone de texte
Je suis en train de désactiver toutes les touches saisies dans une zone de texte à l'exception des suivants:
0 1 2 3 4 5 6 7 8 9 . (si toutes les touches, sauf les nombres et le". " doit être désactivée)
Droit maintenant, j'ai le code suivant mais il ne vérifie si une lettre a été conclu que la première valeur (pour ne pas mentionner son vraiment bâclée):
private void yDisplacementTextBox_TextChanged(object sender, EventArgs e)
{
if (yDisplacementTextBox.Text.ToUpper() == "A" || yDisplacementTextBox.Text.ToUpper() == "B" || yDisplacementTextBox.Text.ToUpper() == "C" ||
yDisplacementTextBox.Text.ToUpper() == "D" || yDisplacementTextBox.Text.ToUpper() == "E" || yDisplacementTextBox.Text.ToUpper() == "F" ||
yDisplacementTextBox.Text.ToUpper() == "G" || yDisplacementTextBox.Text.ToUpper() == "H" || yDisplacementTextBox.Text.ToUpper() == "I" ||
yDisplacementTextBox.Text.ToUpper() == "J" || yDisplacementTextBox.Text.ToUpper() == "K" || yDisplacementTextBox.Text.ToUpper() == "L" ||
yDisplacementTextBox.Text.ToUpper() == "M" || yDisplacementTextBox.Text.ToUpper() == "N" || yDisplacementTextBox.Text.ToUpper() == "O" ||
yDisplacementTextBox.Text.ToUpper() == "P" || yDisplacementTextBox.Text.ToUpper() == "Q" || yDisplacementTextBox.Text.ToUpper() == "R" ||
yDisplacementTextBox.Text.ToUpper() == "S" || yDisplacementTextBox.Text.ToUpper() == "T" || yDisplacementTextBox.Text.ToUpper() == "U" ||
yDisplacementTextBox.Text.ToUpper() == "V" || yDisplacementTextBox.Text.ToUpper() == "W" || yDisplacementTextBox.Text.ToUpper() == "X" ||
yDisplacementTextBox.Text.ToUpper() == "Y" || yDisplacementTextBox.Text.ToUpper() == "Z")
{
MessageBox.Show("Please enter a numeric value for the Y Displacement.", "Y Displacement: Numbers Only Error",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
Est-il de toute façon à l'avoir, donc lorsqu'il est pressé, toutes les touches du clavier (sauf le nombre et la période de bouton) ne s'inscrivent pas (ou désactive) la valeur réelle de la clé et des intrants rien?
une première suggestion, votre logique serait beaucoup plus simple pour rechercher les lettres que vous voulez autoriser, et en ignorant (ou aide) tout ce qui n'est pas
Jetez un oeil à ce post. Espérons que cela aide.
Est-ce winforms ou wpf? Vous devez supprimer les
WinForms à l'aide de VS2010
0-9
ou .
.Jetez un oeil à ce post. Espérons que cela aide.
Est-ce winforms ou wpf? Vous devez supprimer les
input
tag, et d'ajouter l'une de ces balises.WinForms à l'aide de VS2010
OriginalL'auteur theNoobGuy | 2011-07-18
Vous devez vous connecter pour publier un commentaire.
Utilisation
textBox1.KeyPress += textBox1_KeyPress
Ce code ne permettant numéros et
.
et la touche d'effacement arrière.Char.IsNumber()
peut être utile icivous avez raison, j'ajoute à la réponse comme alternative, merci.
OriginalL'auteur Jalal Said
Il ya deux façons que vous pouvez essayer à cette approche:
Attendre que l'utilisateur fini d'entrer les données, puis utiliser
double.TryParse()
à assurez-vous que c'est un nombre valide.Utiliser le KeyPress cas de la zone de texte pour valider les données que chaque touche est pressée.
OriginalL'auteur Dan Walker
Prendre un coup d'oeil ici: Numérique Simple Zone De Texte
EDIT: Comme d'autres réponses explique quoi faire affaire avec OnKeyPress/OnKeyDown événements, cet article montre comment traiter avec d'autres scénarios, comme le collage de texte, donc je vais garder cette réponse.
OriginalL'auteur Rubens Farias
Vous devriez accrocher dans le
KeyDown
etKeyPress
événement pour prévenir l'entrée de caractères indésirables. Il y a un l'échantillon sur MSDNOriginalL'auteur ChrisWue
Tierce, le contrôle de bibliothèques ont également ce genre de fonctionnalités intégrées dans si vous vous trouvez à l'aide de l'un d'eux.
OriginalL'auteur Tory Netherton
Il est préférable de permettre à taper quoi que ce soit, mais de donner notification par l'intermédiaire d'un fournisseur d'erreur à propos de l'échec de la validation (Validation de l'événement et double.TryParse()).
Mais si vous insistez, assurez-vous de remplacer le". " avec le séparateur décimal du système. Si vous n'êtes pas en supposant que toutes les valeurs de l'anglais, vous pouvez facilement obtenir dans une ne peut-enter-a-décimal-problème de valeur.
Par exemple, je suis en Croatie et nous avons ici de taper une virgule (,). Dans certains pays islamique je n'arrive pas à se rappeler le séparateur décimal est un dièse (#).
Alors méfiez-vous des problèmes de localisation.
OriginalL'auteur Marino Šimić
Le code ci-dessous va supprimer tous mais le nombre, le retour arrière, et la virgule. De plus, cela ne permet à une seule décimale pour la saisie numérique.
OriginalL'auteur Loren Shaw
Cela peut également être utilisé
OriginalL'auteur Syamilsynz
Plus court corriger afin de rendre le texte/cmb zone en lecture seule, fixez la suite de chaque événement keypress :
private void cmbDisable_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = (char)(0);
}
OriginalL'auteur TNM