我在Control
中编写了一个Extension方法来获取Tab键顺序 First 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();
}
但我认为它不是最好的方式,有人能建议更好的方法来解决这个问题吗?提前谢谢。
答案 0 :(得分:2)
您可以使用Min()
:
public static void FirstControlFocus(this Control ctl)
{
ctl.Controls.OfType<Control>()
.FirstOrDefault(c => c.TabIndex == ctl.Controls.OfType<Control>().Min(t => t.TabIndex))
?.Focus();
}
Where()
中没有必要 - 您只能使用FirstOrDefault()
。另外,如果?.Focus()
返回FirstOrDefault()
,请考虑使用null
。