【VB.NET、C#】テキストボックスの背景色を変更する

#テキストボックスの背景色を変更する
テキストボックスの背景色を変更する場合、コントロールのBackColorプロパティにColor構造体のプロパティを設定することで、背景色の変更が可能です。

Color構造体のプロパティはMSDNで公開されています。

https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.color?view=net-6.0


#実行確認用テストフォーム
イベント発生時に、BackColorプロパティに対して、Color構造体のプロパティを設定してみます。
「クリックイベント発生時に、テキストボックスの背景色を変更する」というテストフォームを作成して動作を確認してみます。

![20220106_001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2162017/75c16946-8075-02f9-3969-b09999adf387.jpeg)


```vb
'【VB.NET】
Private Sub btnColorChange_Click(sender As Object, e As EventArgs) Handles btnColorChange.Click
    'テキストボックスの背景色を赤に設定
    txtTarget.BackColor = Color.Red
End Sub
```

```c#
//【C#】
private void btnColorChange_Click(object sender, EventArgs e)
{
    //テキストボックスの背景色を赤に設定
    txtTarget.BackColor = Color.Red;
}
```

実行結果はこう。

![20220106_002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2162017/554f5c89-df4b-4030-0246-847842937a04.jpeg)


テキストボックスの背景色が赤色に変わりました。

#テキストボックスの背景色を元に戻したい（デフォルトに設定したい）場合
テキストボックスの背景色を変更した後、元に戻したい場合は、BackColorプロパティに対して、SystemColorsクラスのWindowを設定します。

```vb
'【VB.NET】
'テキストボックスの背景色をデフォルトに設定
txtTarget.BackColor = SystemColors.Window
```

```c#
//【C#】
//テキストボックスの背景色をデフォルトに設定
txtTarget.BackColor = SystemColors.Window;
```

#どんな時に使うのか？

テキストボックスの背景色を変更する場合、入力チェック時にチェックを通過していない箇所のテキストボックス背景色を変更して、ユーザーの視覚に訴えるなどの場合に使います。

- 必須入力なのに未入力
- 5文字以上入力必須にしているのに、文字数が足りない

など、画面には色々なチェックがあると思います。

以下の画面、赤枠で囲ったテキストボックスを必須入力とした画面を用意しました。

![20220106_003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2162017/70b6f890-8d2d-3cc5-ecd2-c021adfa121f.jpeg)


登録ボタンをクリックすると、建物名はブランクでもOKですが、氏名・郵便番号・住所がブランクだと背景色が赤に変わります。
クリアボタンをクリックすると、テキストボックスの文字と背景色がクリアされます。

ソースコードはこちら。

```vb
'【VB.NET】
Private Sub btnAction_Click(sender As Object, e As EventArgs) Handles btnAction.Click

    'テキストボックス背景色の初期化
    txtName.BackColor = SystemColors.Window         '氏名
    txtPostNo.BackColor = SystemColors.Window       '郵便番号
    txtAddress.BackColor = SystemColors.Window      '住所

    '氏名のブランクチェック
    If Trim(txtName.Text) = "" Then
        txtName.BackColor = Color.Red
    End If

    '郵便番号のブランクチェック
    If Trim(txtPostNo.Text) = "" Then
        txtPostNo.BackColor = Color.Red
    End If

    '住所のブランクチェック
    If Trim(txtAddress.Text) = "" Then
        txtAddress.BackColor = Color.Red
    End If

End Sub

'クリアボタンクリック
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    'テキストボックス文字列の初期化
    txtName.Text = ""           '氏名
    txtPostNo.Text = ""         '郵便番号
    txtAddress.Text = ""        '住所
    txtTatemono.Text = ""       '建物名

    'テキストボックス背景色の初期化
    txtName.BackColor = SystemColors.Window         '氏名
    txtPostNo.BackColor = SystemColors.Window       '郵便番号
    txtAddress.BackColor = SystemColors.Window      '住所
End Sub
```

```c#
//【C#】
private void btnAction_Click(object sender, EventArgs e)
{

    //テキストボックス背景色の初期化
    txtName.BackColor = SystemColors.Window;        //氏名
    txtPostNo.BackColor = SystemColors.Window;      //郵便番号
    txtAddress.BackColor = SystemColors.Window;     //住所

    //氏名のブランクチェック
    if (txtName.Text == "")
    {
        txtName.BackColor = Color.Red;
    }

    //郵便番号のブランクチェック
    if (txtPostNo.Text == "") 
    {
        txtPostNo.BackColor = Color.Red;
    }

    //住所のブランクチェック
    if (txtAddress.Text == "")
    {
        txtAddress.BackColor = Color.Red;
    }
}

private void btnClear_Click(object sender, EventArgs e)
{
    //テキストボックス文字列の初期化
    txtName.Text = "";          //氏名
    txtPostNo.Text = "";        //郵便番号
    txtAddress.Text = "";       //住所
    txtTatemono.Text = "";      //建物名

    //テキストボックス背景色の初期化
    txtName.BackColor = SystemColors.Window;        //氏名
    txtPostNo.BackColor = SystemColors.Window;      //郵便番号
    txtAddress.BackColor = SystemColors.Window;     //住所
}
```
何も入力せずに登録ボタンをクリックすると、氏名・郵便番号・住所のテキストボックス背景色が赤色になります。

![20220106_004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2162017/59746e32-5295-c862-c197-647c96c3e8cd.jpeg)


また、氏名だけ入力して登録ボタンをクリックすると、郵便番号と住所のテキストボックス背景色が赤色になります。

![20220106_005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2162017/a130a87e-8b7b-4163-d76c-971395384abc.jpeg)


#参考

https://docs.microsoft.com/ja-jp/office/vba/api/excel.forecolor

https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.color?view=net-6.0

https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.systemcolors?view=net-6.0