NumericUpDown-Hintergrundfarbe funktioniert nicht wie erwartet

Vor kurzem musste ich eine Version des Windows NumericUpDown-Steuerelements schreiben, mit der hervorgehoben werden konnte, ob ein Wert obligatorisch war. Dazu musste die Hintergrundfarbe des Steuerelements geändert werden. Ich dachte, das wäre einfach genug, aber wenn ich es versuche, stelle ich fest, dass es einen seltsamen Nebeneffekt hat, nicht die gesamte Kontrolle zu übernehmen.

Wenn ich den folgenden Code verwende, sehe ich Folgendes:

Wenn ich ein Steuerelement in einem Windows-Formular lösche und die BackColor-Eigenschaft ändere(dh zu Blau)ändert sich die Farbe des gesamten Nummernteils des Steuerelements. Wenn ich alternativ meine "IsMandatory" -Eigenschaft ändere, ändert sich nicht ganz die gesamte Hintergrundfarbe(es hinterlässt eine Grenze). Wenn ich also die Hintergrundfarbe in Blau ändere und dann IsMandatory auf True setze, erhalte ich ein LightBlue-Steuerelement(die obligatorische Farbe) mit einem blauen Rand.

Ich kann nicht verstehen, warum das so ist, da beide denselben Code verwenden.

Ideen oder Erklärungen sehr gut aufgenommen.

   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);
      }
   }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage