web-dev-qa-db-ja.com

TextBoxがアルファベット文字のみを受け入れるようにする方法は?

TextBoxにスペース付きのアルファベット文字のみを許可するにはどうすればよいですか?

18
Lijina

次のスニペットを使用できます。

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

テキストボックスのKeyPressイベントを処理して試すことができます

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

さらに、テキストを削除したい場合にバックスペースを許可すると言います。これはあなたにとって完璧に機能するはずです

[〜#〜] edit [〜#〜]

上記のコードは、TextChangedイベントを使用する必要があると思われるフィールドへの貼り付けには機能しませんが、間違った文字を削除するか、強調表示して配置する必要があるため、もう少し複雑になりますユーザーが修正を行うためのカーソルまたはユーザーが完全なテキストを入力し、コントロールからタブを外した後に検証することもできます。

17
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

Text_KeyPressイベントのコードを

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {

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

最も簡単な方法は、TextChangedEventを処理し、入力内容を確認することです。

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

必要に応じて、これは正規表現のないバージョンです。不正な入力があるとテキストボックスが点滅します。貼り付け操作もサポートしているようです。

4
Pavel Donchev

このソリューションでは、正規表現を使用し、無効な文字をテキストボックスに貼り付けることを許可せず、カーソルの位置を維持します。

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

注:textBox1_TextChangedの再帰呼び出し。

3
StuKay

これは完全に正常に動作しています...

 private void manufacturerOrSupplierTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (char.IsControl(e.KeyChar) || char.IsLetter(e.KeyChar))
        {
            return;
        }
        e.Handled = true;
    }
3
Sohail Malik
        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");


        }

これを試してください

2

これを試して

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

余白も許可する

1
Abu Bakar

キーを押すイベントの発生時に警告するコードをたどることができます

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

ここに私のソリューションがあり、計画どおりに機能します:

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

これは、文字の制限に関しては正常に機能します。エラーメッセージに関する提案C以外の場合、コードでプロンプトを表示OR L

Private Sub TXTBOX_TextChanged(sender As System.Object、e As System.EventArgs)Handles 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

テキストボックスのKeyPressイベントで次のコードを試してください

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