以下のように、タブ オーダーの最初のコントロールを取得する拡張メソッドを記述Control
します。
public static void FirstControlFocus(this Control ctl)
{
ctl.Controls.OfType<Control>().Where(c => c.TabIndex == 0).FirstOrDefault().Focus();
}
問題は、TabOrder==0
! (たとえば、開発者Taborder==0
がデザイン モードでコントロールを削除するなど) を持つ既存のコントロールが存在しない可能性があり、実行時にエラーが発生することです。
私はこのコードでこの問題を処理します:
public static void FirstControlFocus(this Control ctl)
{
if (ctl.Controls.OfType<Control>().Any(c => c.TabIndex == 0))
ctl.Controls.OfType<Control>().Where(c => c.TabIndex == 0).FirstOrDefault().Focus();
else if (ctl.Controls.OfType<Control>().Any(c => c.TabIndex == 1))
ctl.Controls.OfType<Control>().Where(c => c.TabIndex == 1).FirstOrDefault().Focus();
else if (ctl.Controls.OfType<Control>().Any(c => c.TabIndex == 2))
ctl.Controls.OfType<Control>().Where(c => c.TabIndex == 2).FirstOrDefault().Focus();
else if (ctl.Controls.OfType<Control>().Any(c => c.TabIndex == 3))
ctl.Controls.OfType<Control>().Where(c => c.TabIndex == 3).FirstOrDefault().Focus();
}
しかし、それは最善の方法ではないと思います。この問題を処理するためのより良い方法を提案できる人はいますか? 前もって感謝します。