title: How to inherit base Textbox to provide colored borders
body: <p>I have a winform app that we use in house.  It has many individual controls on each of it's 25 "pages"(usercontrols).  Our user base prefers very technicolor apps...they want a TextBox to be outlined Blue if it is a required field (color should go away if data entered).  They want a TextBox to change to outlined Green if data has been changed in it to remind them to save.  They want a currently highlighted TextBox to be outlined RedOrange.</p>
  
  <p>I have been trying to come at this from many different angles (some of you have probably seen similar posts by me lately).  Non of them work...  So one way I KNOW will work is to register the paint event for every control and check for a "required" tag for the required portion.  The OnFocus for the current field portion and finally the Validate event for the data changed portion.</p>
  
  <p>I know this is not the best way or at least I STRONGLY suspect it isn't but I am out of time, nearly, and nearing my point of frustration.  That being said, will that DESTROY my app's responsiveness?  Is there a better way?  Can I override the base control to color on different premises so that I don't have to go to each of the 100+ controls?</p>
  
  <p>Any idea would be welcome because I am between my stupid Paint_Event idea and rewriting all the controls in WPF... :)</p>
  
  <p><strong>I will be rewarding a solution that works for me and that I can implement shortly with a Bounty.</strong>  </p>
  
  <p>I am so sick of colors...</p>
  
  <hr>
  
  <p>Here is my attempt based on suggestions.</p>
  
  <pre><code>public class MyTextBox : TextBox
  {
      private bool _isRequired;
      public bool isRequired
      {
          get
          {
              return _isRequired;
          }
          set
          {
              _isRequired = value;
          }
      }
  
      protected override void OnPaint(PaintEventArgs e)
      {
          base.OnPaint(e);
          if (isRequired &amp;&amp; base.Text.Equals(string.Empty))
          {
              HighlightControl(e.Graphics);
          }
      }
  
      private void HighlightControl(Graphics graphics)
      {
          ControlPaint.DrawBorder(
                  graphics,
                  this.ClientRectangle,
                  Properties.Settings.Default.RequiredFieldColor,
                  Properties.Settings.Default.BorderWidth,
                  Properties.Settings.Default.BorderStyle,
                  Properties.Settings.Default.RequiredFieldColor,
                  Properties.Settings.Default.BorderWidth,
                  Properties.Settings.Default.BorderStyle,
                  Properties.Settings.Default.RequiredFieldColor,
                  Properties.Settings.Default.BorderWidth,
                  Properties.Settings.Default.BorderStyle,
                  Properties.Settings.Default.RequiredFieldColor,
                  Properties.Settings.Default.BorderWidth,
                  Properties.Settings.Default.BorderStyle);
      }
  }
  </code></pre>