UserControl first - child controls immediately follow.
After you add all the controls to the form, loop thru the form instance in a recursive function which would look something similar to this:
Start the tabIndex with zero and increment it for each control of the form. If the control has children, fix them when you find them.
private int tabIndex = 0;
private void FixControls(Control parentContainer)
{
foreach (Control ctrl in parentContainer.Controls)
{
//set the tab order for this control first.
if (ctrl.TabStop)
{
ctrl.TabIndex = tabIndex++;
}
if (ctrl.HasChildren)
FixControls(ctrl);
}
}
If this does not help, post your code. Let's have a brief look.
Hope this helps.