如何在控件中找到 Tab 顺序中的第一个控件?
How to find the First Control in Tab Order in a Control?
我编写了一个扩展方法来获取 Tab 顺序中的第一个控件,如下所示:
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();
}
但我认为这不是最好的方式,谁能提出更好的方法来处理这个问题?提前致谢。
您可以使用 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()
。此外,如果 FirstOrDefault()
returns null
.
,请考虑使用 ?.Focus()
我编写了一个扩展方法来获取 Tab 顺序中的第一个控件,如下所示:
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();
}
但我认为这不是最好的方式,谁能提出更好的方法来处理这个问题?提前致谢。
您可以使用 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()
。此外,如果 FirstOrDefault()
returns null
.
?.Focus()