事件numericupdown_BackColorChanged不会触发

时间:2013-01-02 13:18:30

标签: c# .net winforms numericupdown backcolor

我想编写一个应用程序,用户可以在NumericUpDown Control中输入一个数字。在运行时确定的数量(例如范围)有一些条件。为了向用户提供反馈,当至少一个条件不满足时,我将NumericUpDown的BackColor更改为红色。到目前为止,它的工作方式与我期望的一样。

现在我想在NumericUpDown中添加一个工具提示来解释数字为“错误”的原因。当我使用事件NumericUpDown_BackColorChanged来调整文本时,事件就不会“触发”。那是为什么?

我想这与NumericUpDown的复合字符有关,因为Hans Passant已声明herehere。但我不确定。 TY提前帮助。

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        if (numericUpDown1.Value == 42)
        {
            numericUpDown1.BackColor = Color.Red;
        }
        else
        {
            numericUpDown1.BackColor = System.Drawing.SystemColors.Window;
        }
    }

private void numericUpDown1_BackColorChanged(object sender, EventArgs e)
    {
        //something epic should happen
        //but somehow my program never reaches these lines :(
    }

2 个答案:

答案 0 :(得分:4)

我已经确认NumericUpDown.BackColor属性设置器确实没有调用OnBackColorChanged(至少在.NET 4.0中)。

我认为这是因为BackColor属性已在UpDownBase中被覆盖,以便在BackColor内设置合成控件的NumericUpDown,也许有人忘记调用基础实现(我很乐意听到一些WinForms专家)。

您可以做的是创建一个继承自FixedNumericUpDown的{​​{1}}控件,并覆盖NumericUpDown属性:

BackColor

答案 1 :(得分:0)

建议:您可以通过拖放工具箱添加ErrorProvider来完成此操作。

替换您的代码如下:

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    { 
        errorProvider1.Clear();

        if (numericUpDown1.Value == 42)
        {
            numericUpDown1.BackColor = Color.Red;
            errorProvider1.SetError(numericUpDown1, "Select another number");
        }
        else
        {
            numericUpDown1.BackColor = System.Drawing.SystemColors.Window;
        }
    }