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