我想编写一个应用程序,使用户可以在NumericUpDown控件中输入数字。在运行时确定数字的一些条件(例如范围)。为了向用户提供反馈,当至少满足一个条件时,我将NumericUpDown的BackColor更改为红色。到目前为止,它按我预期的那样工作。
现在,我想向NumericUpDown添加一个工具提示,以解释数字为何“错误”。当我使用事件NumericUpDown_BackColorChanged调整文本时,该事件将不会“触发”。这是为什么?
我猜想这与NumericUpDown的复合字符有关,因为Hans Passant已声明here和here。但是我不确定。 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/