title: OnPaint not getting called if form doesn't have focus
body: <p>I have a user control with custom painting.  Constructor sets styles correctly, from what I can tell.  Basic code:</p>
  
  <pre><code>public partial class LineChart2 : UserControl
  {
      public LineChart2()
      {
          InitializeComponent();
  
          //Set control styles to eliminate flicker on redraw and to redraw on resize
          this.SetStyle(
              ControlStyles.ResizeRedraw |
              ControlStyles.UserPaint |
              ControlStyles.AllPaintingInWmPaint |
              ControlStyles.DoubleBuffer,
              true);
  
          SetDefaultValues();
      }
  
      protected override void OnPaint(PaintEventArgs e)
      {
      // breakpoint set here for verification
          Paint~misc stuff(e.Graphics);
  
          base.OnPaint(e);
      }
  
      private void UpdateGraph()
      {
      // this is called when the data that the control depends on changes
          ~update stuff();
  
          this.Invalidate();
          //this.Refresh();
      }
  }
  </code></pre>
  
  <p>The control is contained within a Panel on a standard WinForm.</p>
  
  <p>I've tried both Invalidate and Refresh.</p>
  
  <p>When using Invalidate(), the control will redraw properly as long as the form it is contained in has focus.  Drawing is smooth.  When I switch focus to another form, drawing ceases even though the events are still firing, and this.Invalidate() is still being called.  The form is still fully visible on screen.</p>
  
  <p>When using Refresh(), the control will redraw regardless of whether the form has focus, but the drawing constantly flickers, as if bypassing the double-buffering mechanism.</p>
  
  <p>So how do I get the Invalidate message to properly invoke the OnPaint method regardless of focus?</p>