I have looked at the generated designer code of Form
s and UserControl
s, and in the InitializeComponent()
method they always start with
this.SuspendLayout();
and end with
this.ResumeLayout(false);
this.PerformLayout();
But from what I can see in the msdn documentation of those methods, wouldn't ending with
this.ResumeLayout(true); // Or just this.ResumeLayout()
do the exact same thing? Or am I missing something here?
Asking because I will be adding a bunch of controls in a different method, and thought I should do the suspend-resume routine to be nice and efficient. But can't figure out what the reason for those two method calls are when you can seemingly just use one...
Using reflector:
this.ResumeLayout() is equal to this.ResumeLayout(true)
But
this.ResumeLayout(true) is not equal to this.ResumeLayout(false) + this.PerformLayout()
Reason:
When ResumeLayout is called with false, there is a control collection that is looped through and the LayoutEngine calls InitLayout on each of the controls in the layout.
SuspendLayout
When adding several controls to a
parent control, it is recommended that
you call the SuspendLayout method
before initializing the controls to be
added. After adding the controls to
the parent control, call the
ResumeLayout method. This will
increase the performance of
applications with many controls.
PerformLayout
It forces the control to apply layout
logic to all its child controls. If
the SuspendLayout method was
called before calling the
PerformLayout method, the Layout event is suppressed. The layout event can be suppressed using the SuspendLayout and
ResumeLayout methods.
MSDN Link - PerformLayout Method