我想编写一个应用程序,使用户可以在NumericUpDown控件中输入数字。在运行时确定数字的一些条件(例如范围)。为了向用户提供反馈,当至少满足一个条件时,我将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 :(
    }

最佳答案

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

我认为发生这种情况是因为BackColor属性已在UpDownBase中被覆盖,从而也在BackColor内设置了复合控件的NumericUpDown,也许有人忘记了调用基本实现(我很乐意听一些WinForms专家的位置)。

您可以做的是创建一个从FixedNumericUpDown继承并覆盖NumericUpDown属性的BackColor控件,如下所示:

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

关于c# - 事件numericupdown_BackColorChanged不触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14122794/

10-11 01:51