C# Hex Masque pour maskedtextbox d'entrée
Je suis en train de définir un hex de masque pour une zone de texte. De sorte que seulement valide les nombres hexadécimaux peuvent être saisis. (Et", " et "ENTRÉE")
Il fonctionne presque. Jusqu'à présent, il permettra seulement de petites lettres de a à f et les chiffres de 0 à 9, mais je peux toujours saisir des lettres majuscules GHIJKLM. (Au début, lorsque le programme est lancé, il semble accepter un char ex k, mais après il a exclu k une fois qu'il ne sera pas affiché après que, jusqu'à la prochaine fois que vous démarrez le programme. C'est bizarre.)
Ici est une partie de code:
private void EnterKey(Object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//if keychar == 13 is the same as check for if <ENTER> was pressed
if (e.KeyChar == (char)13)
{
//is <ENTER> pressed, send button_click
button1_Click(sender, e);
}
{
//this will only allow valid hex values [0-9][a-f][A-F] to be entered. See ASCII table
char c = e.KeyChar;
if (c != '\b' && !((c <= 0x66 && c >= 61) || (c <= 0x46 && c >= 0x41) || (c >= 0x30 && c <= 0x39) || (c == 0x2c)))
{
e.Handled = true;
}
}
}
C'est la façon dont je la lie de l'événement:
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyDown);
}
Quelqu'un pourrait-il de vous les gars sage, voir ce que je fais mal?
C'est mon premier petit programme, alors allez facile sur moi :o)
- La partie sur la première touche, ce qui n'a pas beaucoup de sens. Comment voulez-vous lier l'événement? Avez-vous essayez d'utiliser la
KeyDown
événement? - Je l'ai fait à partir de la zone de saisie: private void textBox1_TextChanged(object sender, EventArgs e) { this.textBox1.KeyPress += new System.De Windows.Les formulaires.KeyPressEventHandler(textBox1_KeyDown); }
Vous devez vous connecter pour publier un commentaire.
Ce:
Devrait être:
Note que vous perdez un temps précieux en recherche de codes hex, vous pouvez comparer facilement les personnages:
Comme pour le premier caractère: vous ne devriez pas lier le
KeyPress
à laTextChanged
de l'événement - c'est trop tard! Voici la séquence des événements:Ce que vous voulez faire est de lier l'événement dès le début. Le meilleur endroit est le
Form_Load
événement.Vous pouvez également utiliser la fenêtre Propriétés de lier l'événement au moment de la conception
Si vous n'avez pas utilisé des numéros de magie, tu n'aurais jamais rencontré ce problème. Réécrire votre
if
comme ceci:Utiliser une expression régulière:
:)
Ce type de programme, est-ce un ASP.NET site web ou un certain type de winforms/wpf client lourd? La raison pour laquelle je demande, c'est que vous avez peut-être des tests sur le code périmé. Sinon sur le changement peut être à juste inverser la logique de la vérification pour être plus en adéquation avec ce que vous voulez. Veiller à ce que le caractère est un élément dans le jeu autorisé. Un refactoring est ci-dessous.
e.Manipulés = (c >= 0x61 && c <=0x66) || (c >=0x41 && c<= 0x46) || (c >= 0x30 && c <= 0x39);
Comme une approche alternative si vous voulez juste pour valider l'ensemble de la zone de texte en une seule fois au lieu de après chaque pression sur la touche, vous pouvez simplement analyser la valeur pour voir si c'est un nombre. Le fragment de code suivant va générer analyser la valeur 11486525 de AF453d. Si le numéro n'est pas valide valeur hexadécimal le résultat de isHex sera false;
Pourquoi compliquer?
En fonction de la réponse par Kobi pour WPF
Capture des lettres, des chiffres et des touches de chiffres.