事件numericupdown_BackColorChanged不触发

本文关键字:BackColorChanged numericupdown 事件 | 更新日期: 2023-09-27 17:50:19

我想编程一个应用程序,用户可以在NumericUpDown控制中输入一个数字。这个数字有一些在运行时确定的条件(例如范围)。为了给用户反馈,当至少一个条件不满足时,我将NumericUpDown的BackColor更改为红色。到目前为止,它的工作正如我所期望的那样。

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

我猜这与汉斯·帕桑在这里和这里所说的NumericUpDown的复合字符有关。但我不确定。感谢您的帮助。

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 :(
    }

事件numericupdown_BackColorChanged不触发

我已经确认NumericUpDown.BackColor属性setter确实不调用OnBackColorChanged(至少在。net 4.0中)。

我认为这是因为BackColor属性已经在UpDownBase中被覆盖,也设置了NumericUpDown内的合成控件的BackColor,也许有人忘记调用基本实现(我很想听到一些WinForms大师在这里)。

你能做的是创建一个FixedNumericUpDown控件,它继承NumericUpDown并覆盖BackColor属性:

public Color BackColor
{
    override set
    {
        base.BackColor = value;
        OnBackColorChanged(EventArgs.Empty);
    }
}

建议:你可以在你的工具箱中添加一个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;
        }
    }
相关文章:
  • 没有找到相关文章