web-dev-qa-db-fra.com

Comment faire en sorte qu'une TextBox n'accepte que des caractères alphabétiques?

Comment créer une TextBox uniquement des caractères alphabétiques avec des espaces?

18
Lijina

Vous pouvez utiliser l'extrait suivant:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (!System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z ]"))
    {
        MessageBox.Show("This textbox accepts only alphabetical characters");
        textBox1.Text.Remove(textBox1.Text.Length - 1);
    }
}
15
favoretti

Vous pouvez essayer en gérant l'événement KeyPress pour la zone de texte

void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back);
}

De plus, autorisez le retour arrière au cas où vous voudriez supprimer du texte, cela devrait fonctionner parfaitement pour vous.

MODIFIER

Le code ci-dessus ne fonctionnera pas pour coller dans le champ pour lequel je pense que vous devrez utiliser l'événement TextChanged, mais il serait alors un peu plus compliqué de supprimer le caractère incorrect ou de le surligner et de placer le curseur pour l'utilisateur faire la correction Ou peut-être que vous pourriez valider une fois que l'utilisateur a saisi le texte complet et les onglets du contrôle.

15
V4Vendetta
private void textbox1_KeyDown_1(object sender, KeyEventArgs e)
{
    if (e.Key >= Key.A && e.Key <= Key.Z)
    {
    }
    else
    {
       e.Handled = true;
    }
}
5
user1737728

Écrire le code dans l'événement Text_KeyPress en tant que

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (!char.IsLetter(e.KeyChar))
        {
            e.Handled = true;
        }
    }
4
Akshita

Le moyen le plus simple est de gérer TextChangedEvent et de vérifier ce qui a été saisi:

string oldText = string.Empty;
    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        if (textBox2.Text.All(chr => char.IsLetter(chr)))
        {
            oldText = textBox2.Text;
            textBox2.Text = oldText;

            textBox2.BackColor = System.Drawing.Color.White;
            textBox2.ForeColor = System.Drawing.Color.Black;
        }
        else
        {
            textBox2.Text = oldText;
            textBox2.BackColor = System.Drawing.Color.Red;
            textBox2.ForeColor = System.Drawing.Color.White;
        }
        textBox2.SelectionStart = textBox2.Text.Length;
    }

Ceci est une version sans regex si vous préférez. Cela fera clignoter la zone de texte lorsque la saisie est mauvaise .. Veuillez noter que cela semble également prendre en charge les opérations de collage.

4
Pavel Donchev

Celui-ci fonctionne parfaitement bien ...

 private void manufacturerOrSupplierTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (char.IsControl(e.KeyChar) || char.IsLetter(e.KeyChar))
        {
            return;
        }
        e.Handled = true;
    }
3
Sohail Malik

Cette solution utilise des expressions régulières, ne permet pas de coller des caractères non valides dans la zone de texte et maintient la position du curseur.

using System.Text.RegularExpressions;

int CursorWas;
string WhatItWas;

private void textBox1_Enter(object sender, EventArgs e)
    {
        WhatItWas = textBox1.Text;
    }

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (Regex.IsMatch(textBox1.Text, "^[a-zA-Z ]*$"))
        {
            WhatItWas = textBox1.Text;
        }
        else
        {
            CursorWas = textBox1.SelectionStart == 0 ? 0 : textBox1.SelectionStart - 1;
            textBox1.Text = WhatItWas;
            textBox1.SelectionStart = CursorWas;
        }
    }

Remarque: appel récursif textBox1_TextChanged.

2
StuKay
        if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z]+$"))
        { 
        }
        else
        {
            textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
            MessageBox.Show("Enter only Alphabets");


        }

S'il vous plaît essayer ceci

2
Thomas Siranjeevi

Essaye ça

            private void tbCustomerName_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back||e.KeyChar==(char)Keys.Space);
    }

Cela permet aussi aux espaces blancs

1
Abu Bakar

vous pouvez essayer de suivre le code de cette alerte au moment de la frappe

private void tbOwnerName_KeyPress(object sender, KeyPressEventArgs e)
    {

        //===================to accept only charactrs & space/backspace=============================================

        if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space))
        {
            e.Handled = true;
            base.OnKeyPress(e);
            MessageBox.Show("enter characters only");
        }
1
Niteen4u
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar >= '0' && e.KeyChar <= '9')
                e.Handled = true;
            else
                e.Handled = false;
        }
1
farhad

Voici ma solution et cela fonctionne comme prévu:

string errmsg = "ERROR : Wrong input";
ErrorLbl.Text = errmsg;

if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space))
{
  ErrorLbl.Text = "ERROR : Wrong input";
}
else ErrorLbl.Text = string.Empty;
if (ErrorLbl.Text == errmsg)
{
  Nametxt.Text = string.Empty;
}
0
Josipzuzic

Cela fonctionne très bien en ce qui concerne la restriction des caractères. Toute suggestion sur l'erreur msg Invite avec mon code si ce n'est pas C OR L

Private Sub TXTBOX_TextChanged (expéditeur As System.Object, e As System.EventArgs) gère TXTBOX.TextChanged

    Dim allowed As String = "C,L"
    For Each C As Char In TXTBOX.Text
        If allowed.Contains(C) = False Then

            TXTBOX.Text = TXTBOX.Text.Remove(TXTBOX.SelectionStart - 1, 1)
            TXTBOX.Select(TXTBOX.Text.Count, 0)

        End If

    Next

End Sub
0
sfaj

Essayez de suivre le code dans l'événement KeyPress de textbox

if (char.IsLetter(e.KeyChar) == false  & 
        Convert.ToString(e.KeyChar) != Microsoft.VisualBasic.Constants.vbBack)
            e.Handled = true
0
anagha
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar) &&
         (e.KeyChar !='.'))
        { 
          e.Handled = true;
          MessageBox.Show("Only Alphabets");
        }
    }
0
Sanket7496