Это решение не имеет требуемой производительности, но это "легкий путь". Может быть, есть «более легкий путь», о котором я ничего не знаю.
var firstControl = this.AllChildControls().OrderBy(m => m.TabIndex).First();
firstControl.Focus();
Фрагмент кода зависит от следующего метода расширения.
/// <summary>
/// Preforms a preorder iteration through all children of this control, recursively.
/// </summary>
/// <returns></returns>
public static IEnumerable<Control> AllChildControls(this Control control)
{
foreach (Control child in control.Controls)
{
yield return child;
foreach (var grandchild in child.AllChildControls())
yield return grandchild;
}
}