SuspendLayout and ResumeLayout only prevent OnLayout from
being called. Additionally they only prevent OnLayout from being called for
that particular control. So if you have a Form with a Panel in it, and call SuspendLayout
on the Form, the Panel's layout is not suspended.
private void button1_Click(object sender, EventArgs e) {
this.Layout += new LayoutEventHandler(Form1_Layout);
panel1.Layout += new LayoutEventHandler(Panel1_Layout);
// Test one - calling PerformLayout here does not call Form1_Layout
this.SuspendLayout();
this.PerformLayout();
this.ResumeLayout(false);
// Test two - calling PerformLayout here calls Panel1_Layout
// Child controls are not suspended when the parent is suspended.
this.SuspendLayout();
panel1.PerformLayout();
this.ResumeLayout(false);
// Test three, properly suspending layout
this.SuspendLayout();
panel1.SuspendLayout();
panel1.PerformLayout(); // <--- Layout event on Panel NOT called
panel1.ResumeLayout(false);
this.ResumeLayout(false);
panel1.Layout -= new LayoutEventHandler(Panel1_Layout);
this.Layout -= new LayoutEventHandler(Form1_Layout);
}