事件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.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;
}
}