web-dev-qa-db-de.com

Wie lässt sich eine TextBox nur mit alphabetischen Zeichen aufnehmen?

Wie kann ich eine TextBox zulassen, dass nur Buchstaben mit Leerzeichen akzeptiert werden?

18
Lijina

Sie können das folgende Snippet verwenden:

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

Sie können es versuchen, indem Sie das Ereignis KeyPress für das Textfeld behandeln

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

Sagen Sie zusätzlich die Rücktaste, falls Sie etwas Text entfernen möchten. Dies sollte für Sie einwandfrei funktionieren

EDIT

Der obige Code funktioniert nicht für das Einfügen in das Feld, für das ich glaube, dass Sie das TextChanged -Ereignis verwenden müssen, aber es wäre etwas komplizierter, wenn Sie das falsche Zeichen entfernen oder es markieren und den Cursor für den Benutzer platzieren müssen Um die Korrektur vorzunehmen, oder vielleicht können Sie überprüfen, ob der Benutzer den vollständigen Text und die Registerkarten des Steuerelements eingegeben hat.

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

Schreiben Sie Code in Text_KeyPress Event als

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {

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

Am einfachsten geht es mit dem TextChangedEvent umzugehen und zu prüfen, was eingegeben wurde:

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;
    }

Dies ist eine reguläre Ausdrücke-freie Version. Das Textfeld blinkt bei falscher Eingabe. Bitte beachten Sie, dass es scheinbar auch Einfügevorgänge unterstützt.

4
Pavel Donchev

Dieser funktioniert absolut gut ...

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

Diese Lösung verwendet reguläre Ausdrücke, erlaubt nicht das Einfügen ungültiger Zeichen in das Textfeld und behält die Cursorposition bei.

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;
        }
    }

Anmerkung: textBox1_TextChanged rekursiver Aufruf.

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");


        }

Bitte versuchen Sie das

2

Versuche dies

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

Es erlaubt auch weiße Räume

1
Abu Bakar

sie können versuchen, folgenden Code dieser Warnung zum Zeitpunkt des Tastendrucks zu verwenden

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

Hier ist meine Lösung und es funktioniert wie geplant:

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

Dies funktioniert gut, soweit Zeicheneinschränkungen möglich sind. Irgendwelche Vorschläge zu Fehlernachricht msg. Mit meinem Code auffordern, wenn es nicht C OR L ist

Private Sub TXTBOX_TextChanged (Sender als System.Object, e als System.EventArgs) Verarbeitet 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

Versuchen Sie den folgenden Code im KeyPress-Ereignis des Textfelds

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