最近、値が必須かどうかを強調できるバージョンのWindowsNumericUpDownコントロールを作成する必要がありました。コントロールの背面の色を変更してこれを行う必要がありました。これは簡単だと思いましたが、そうしようとすると、すべてのコントロールを完全に描画できないという奇妙な副作用があることがわかりました。
以下のコードを使用して、私はこれを見ています:
コントロールをWindowsフォームにドロップし、BackColorプロパティを(つまり、青に)変更すると、コントロールの数値部分全体の色が変わります。または、「IsMandatory」プロパティを変更した場合、すべての背面の色が変更されるわけではありません(境界線が残ります)。したがって、BackColorをBlueに変更してから、IsMandatoryをTrueに設定すると、青い境界線を持つLightBlueコントロール(必須の色)が得られます。
どちらも同じコードを使用しているので、なぜそうなのかわかりません。
アイデアや説明は大歓迎です。
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);
}
}