Somewhat strangely, this is how I managed to solve my issue:
protected override void OnShown(EventArgs e)
{
//trigger the OnLoad event of myControl - this does NOT cause it to appear
//over the loading Panel
myControl.Visible = true;
myControl.Visible = false; //set it back to hidden
//now add the control to the Controls collection - this now does NOT trigger the
//change to Visible, therefore leaving it hidden
Controls.Add(myControl);
//finally, set it to Visible to actually show it
myControl.Visible = true;
base.OnShown(e);
}
I can only assume that when adding a control to the Control collection then if the handle is not created it will auto set it to Visible. By making it visible before adding it to the collection, the relevant handles are created by do not affect the parent control. Then when it is added to the collection later on, it still does not interfere with the parent control.