While it seems that the \"right\" way to make a server control is to construct all child controls inside CreateChildControls call. But since it\'s difficult to know when it
You will get away with creating your controls in Init or Load until you write a control that needs to recreate the controls.
I find it is always best to create the controls in CreateChildControls and then use EnsureChildControls to control ensure they are created when you need them. This allows you the ability to tear down the controls by setting ChildControlsCreated to false and have them recreated again when needed.