Masquage une zone de texte pour les numéros seulement, mais l'habitude d'accepter BackSpace

StackOverflow https://stackoverflow.com/questions/1060821

  •  21-08-2019
  •  | 
  •  

Question

J'ai une zone de texte que je voudrais que des chiffres. Mais si je frappe le mauvais numéro, je ne peux pas backspace pour la corriger. Comment puis-je permettre backspaces de travailler. Merci

    private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) != true)
        {
            e.Handled = true;
        }
    }
Était-ce utile?

La solution

Vous pouvez ajouter un contrôle pour permettre des caractères de contrôle ainsi:

if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
    e.Handled = true;
}

Mise à jour: en réponse au commentaire de personne-b du code s / il suggère le style suivant (qui est aussi la façon dont je personnellement écrire ceci):

if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
    e.Handled = true;
}

Autres conseils

La réponse correcte est:

private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}

Vous pouvez également remplacer le TextChanged événement:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string text = (sender as TextBox).Text;

    StringBuilder builder = new StringBuilder(String.Empty);

    foreach (char character in text)
    {
        if (Char.IsDigit(character))
        {
            builder.Append(character);
        }
    }

    (sender as TextBox).Text = builder.ToString();
}

S'il vous plaît noter que vous devez ajouter dans le code pour définir la position de caret.

private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
          e.Handled = True;
}

Un format légèrement plus propre de ce qui précède:

 private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
 {
   e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
 }

J'ai trouvé ce qui suit a bien fonctionné. Il comprenait des exceptions supplémentaires pour permettre backspace, les touches fléchées supprimer la clé, etc. Comment autoriser uniquement numérique (0-9) en HTML inputbox en utilisant jQuery?

private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
    {
        // Allow Digits and BackSpace char
    }        
    else
    {
        e.Handled = true;
    }
}

Reportez-vous aussi Lien: Masking Textbox accepter seulement décimales décimales / 12209854 # 12209854

Vous pouvez utiliser ce qui suit sur l'événement clé de presse:

      private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true; 
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top