web-dev-qa-db-fra.com

C # Numeric Only Control TextBox

J'utilise C # .NET 3.5 et j'ai un problème dans mon projet. Dans l'application Windows C #, je souhaite créer une textbox pour n'accepter que des nombres. Si l'utilisateur essaie de saisir des caractères, le message doit apparaître sous la forme "Veuillez n'entrer que des chiffres", et dans une autre zone de texte, il doit accepter les informations valides email id. Il doit afficher un identifiant d'utilisateur non valide.

10
vamshi
13
Daniel Hilgarth

De C # 3.5, je suppose que vous utilisez WPF.

Créez simplement une liaison de données bidirectionnelle à partir d'une propriété d'entier avec votre zone de texte. WPF affichera automatiquement l'erreur de validation.

Pour le cas de l'e-mail, établissez une liaison de données bidirectionnelle à partir d'une propriété de chaîne qui effectue la validation Regexp dans le configurateur et lève une exception en cas d'erreur de validation.

Recherchez la liaison sur MSDN.

5
Stefan Dragnev

utilisez ce code:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            const char Delete = (char)8;
            e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
        }
4
jolly

Vous voudrez peut-être essayer int.TryParse(string, out int) dans l'événement KeyPress(object, KeyPressEventArgs) pour rechercher des valeurs numériques. Pour l'autre problème, vous pouvez utiliser des expressions régulières à la place.

2
fjdumont

ce chemin est juste avec moi:

private void textboxNumberic_KeyPress(object sender, KeyPressEventArgs e)
{
     const char Delete = (char)8;
     e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
}
2
Bkillnest

J'ai utilisé le TryParse mentionné par @fjdumont mais dans l'événement de validation.

private void Number_Validating(object sender, CancelEventArgs e) {
    int val;
    TextBox tb = sender as TextBox;
    if (!int.TryParse(tb.Text, out val)) {
        MessageBox.Show(tb.Tag +  " must be numeric.");
        tb.Undo();
        e.Cancel = true;
    }
}

Je l'ai attaché à deux zones de texte différentes avec dans mon code d'initialisation de formulaire.

    public Form1() {
        InitializeComponent();
        textBox1.Validating+=new CancelEventHandler(Number_Validating);
        textBox2.Validating+=new CancelEventHandler(Number_Validating);
    }

J'ai également ajouté la tb.Undo() pour annuler les modifications non valides.

2
xecaps12

Vous pouvez vérifier la valeur Ascii par e.keychar à l’événement KeyPress de TextBox.

En vérifiant la valeur AscII, vous pouvez vérifier le nombre ou le caractère.

De même, vous pouvez écrire une logique pour vérifier l'ID de courrier électronique.

1
Bindas

ESSAYER CE CODE 

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;
// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;
    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if (e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (nonNumberEntered == true)
    {
       MessageBox.Show("Please enter number only..."); 
       e.Handled = true;
    }
}


Source: http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx

1
Student