代码之家  ›  专栏  ›  技术社区  ›  Ali Hawk Rong

如何在控件中按制表符顺序查找第一个控件?

  •  2
  • Ali Hawk Rong  · 技术社区  · 7 年前

    选项卡顺序中的第一个控件 在一个 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();
    }
    

    最好的 顺便问一下,有人能提出更好的方法来处理这个问题吗?提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Roman    7 年前

    您可以使用 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 .