views:

45

answers:

2

My winforms application is rendering very choppy. Is there a technique that can be used to either draw a form off screen, or to have it be hidden until the layout has been processed? Anything to help speed up the visual load of my forms.

Thanks for any help.

edit:

Forms have a couple grids each, and around 20 - 30 additional controls (textboxes / checkboxes). All controls are third party and I don't do any custom painting myself.

+1  A: 

You can to call SuspendLayout and, later, do a ResumeLayout.

Rubens Farias
This helped too, thank you.
+1  A: 

You are getting perilously close to having too many controls on your form. You'll see each control taking its turn painting itself. Double buffering cannot fix this, the entire form with all control windows would have to be double-buffered. That's possible since XP, it supports the WS_EX_COMPOSITED window style flag. It won't speed up painting but the screen won't be updated until all rendering is completed.

Paste this code into your form to enable it:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 
Hans Passant
This is black magic. Thanks, am using this for now.