Цвет фона NumericUpDown не работает должным образом
Недавно у меня возникла необходимость написать версию элемента управления Windows NumericUpDown, в которой можно было бы указать, является ли значение обязательным. Это нужно было сделать, изменив задний цвет элемента управления. Я думал, что это будет достаточно просто, но, пытаясь это сделать, я обнаружил, что у него есть странный побочный эффект, заключающийся в том, что он не полностью контролирует ситуацию.
Используя код ниже, я вижу это:
Когда я удаляю элемент управления в форме Windows и изменяю свойство BackColor(ie. to Blue)вся часть номера элемента управления меняет цвет. Если, в качестве альтернативы, я изменю свой & quot; IsMandatory & quot; свойство, не совсем все изменения цвета спины(it leaves a border), Итак, если я изменю BackColor на Blue, а затем установлю IsMandatory на True, я получу элемент управления LightBlue(the mandatory colour) с синей каймой.
Я не могу понять, почему это должно быть, учитывая, что они оба используют один и тот же код.
Идеи или объяснения с благодарностью приняты.
public partial class MyNumericUpDown : NumericUpDown
{
private Boolean _isMandatory = false;
private Color _mandatoryBackColor = Color.LightBlue;
private Color _backColor = Color.FromKnownColor(KnownColor.Window);
[DefaultValue(typeof(Color), "Window"), Description("Overridden property")]
override public Color BackColor
{
get { return _backColor; }
set
{
_backColor = value;
MyResetColors();
}
}
[DefaultValue(typeof(Color), "LightBlue"), Category("Appearance")]
public Color MandatoryBackColor
{
get {return _mandatoryBackColor;}
set
{
_mandatoryBackColor = value;
MyResetColors();
}
}
[DefaultValue(false), Category("Behavior")]
public Boolean IsMandatory
{
get { return _isMandatory; }
set
{
_isMandatory = value;
MyResetColors();
}
}
private void MyResetColors()
{
base.BackColor = (this.IsMandatory ? this.MandatoryBackColor : this.BackColor);
}
}