3

私のwinformアプリケーションでは、必要なフィールドを色分けしようとしています。ユーザー編集では、必要な入力が入力されると背景が薄緑になり、必須フィールドが空の場合は背景が赤になります。一部のフィールドは、他のフィールドへの入力に応じて有効または無効になるため、無効になっている必須フィールドがあり、完全に無効にする必要があります (無効な色の背景)。これは、背景の変更のために私が持っているものです:

public static void UpdateBackgroundColor(this NumericUpDown control)
{
    if (!control.Enabled)
    {
        control.BackColor = SystemColors.InactiveBorder;
        return;
    }

    var inputValue = control.Value;

    if (inputValue == 0)
    {
        control.BackColor = Color.Red;
        return;
    }
    control.BackColor = Color.LightGreen;
}

同様の機能が TextBox で機能し、問題なく正常に機能します。しかし、NumericUpDown は正しく動作しません。これは、フィールドが必須で空の場合に表示されるものです。

ここに画像の説明を入力

ただし、このフィールドが無効になると、周囲に赤い境界線が表示されます。

ここに画像の説明を入力

背景が緑色で無効になると、同じ話が起こります。

では、なぜこれが起こり、どのように修正するのでしょうか?

UPD: Han の回答に従って、すぐにコードを更新しましたが、それでも機能しません。

    private static void SetBackgroundColor(this Control control, Color color)
    {
        control.BackColor = color;
        foreach (Control childControl in control.Controls)
        {
            SetBackgroundColor(childControl, color);
        }
    }

そして、私は大まかに次のように使用しています:

numericUpDown1.Enabled = true;
numericUpDown1.SetBackgroundColor(Color.Red);
numericUpDown1.Enabled = false;
numericUpDown1.SetBackgroundColor(SystemColors.InactiveBorder);

そして、NUD のすべての子コントロールを調べて、そこで背景色を変更したにもかかわらず、テキスト ボックスの周りにそのフレームを取得します。他のアイデアはありますか?

乾杯!!

4

3 に答える 3

3

NumericUpdown は、複数のコントロールの複合体です。テキストボックスは NUD 内にあり、1 ピクセルのオフセットがあります。したがって、テキストボックスの BackColor が外側の NUD コントロールとは異なる設定になっていることがわかります。問題の真の原因はスニペットには表示されませんが、この動作の再現は次のとおりです。

        numericUpDown1.BackColor = Color.Red;
        numericUpDown1.Enabled = false;
        numericUpDown1.Controls[1].BackColor = SystemColors.InactiveBorder;

入れ子になったコントロールの BackColor を設定するコードを修正する必要があります。おそらく Controls コレクションの foreach です。

于 2012-12-04T13:43:25.497 に答える