数字以外が入力で色が変わるTextBoxの実装方法

テキストボックスに指定した文字(数字等)が入力されたら背景色を変えて、ユーザーにルール違反していることを通知したいことがある。
テキストボックスのイベントに少し処理追加すればカンタンに実装することができる。

public partial class Form1 : Form
{
    private readonly Color _defaultBackColor;

    public Form1()
    {
        InitializeComponent();

        _defaultBackColor = textBox1.BackColor;
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        bool error = false;
        foreach(char c in textBox1.Text)
        {
            if (!char.IsDigit(c))
            {
                error = true;
                break;
            }
        }
        if (error)
        {
            textBox1.BackColor = Color.Red;
        }
        else
        {
            textBox1.BackColor = _defaultBackColor;
        }
    }
}

こんな感じで実装すると数字以外が入力された時に背景色が赤くなってお知らせできる。

f:id:powerbombkun:20211227232706p:plain
数字無し
f:id:powerbombkun:20211227232727p:plain
数字有り

数字以外そもそも入力されたくないならNumericUpDownコントロールを使うという手もあるが、数字だけじゃなく小文字英数字だけ許可という場合でも少し処理を変えるかけでカンタンに実装できる。