Not quite sure of your question as the code you show will work, however if you have controls inside a container like a tabcontrol you need to iterate those controls separately as they are not members of the container you are iterating.
Easiest way is to use a recursive function passing the container control as argument and calling itself when it find a control has children passing that control as argument.
Quick example (not tested written of the top of my head).
public sub WalkControls(TopControl as Control)
For Each x As Control In TopControl.Controls
If x.HasChildren Then
WalkControls(x)
Else
End If
Next
End sub