C#

如何获取特定类型(按钮/文本框)的Windows窗体形式的所有子控件?

发布于 2021-02-02 15:53:44

我需要获取类型为x的表单上的所有控件。我敢肯定,我曾经看过使用以下代码的代码:

dim ctrls() as Control
ctrls = Me.Controls(GetType(TextBox))

我知道我可以遍历所有使用递归函数让孩子使用的控件,但是有没有更简单或更直接的东西,也许像下面这样?

Dim Ctrls = From ctrl In Me.Controls Where ctrl.GetType Is Textbox
关注者
0
被浏览
80
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    这是您的另一个选择。我通过创建一个示例应用程序对其进行了测试,然后将一个GroupBox和一个GroupBox放入初始的GroupBox中。在嵌套的GroupBox中,我放置了3个TextBox控件和一个按钮。这是我使用的代码(甚至包括您正在寻找的递归)

    public IEnumerable<Control> GetAll(Control control,Type type)
    {
        var controls = control.Controls.Cast<Control>();
    
        return controls.SelectMany(ctrl => GetAll(ctrl,type))
                                  .Concat(controls)
                                  .Where(c => c.GetType() == type);
    }
    

    为了在表单加载事件中对其进行测试,我希望对初始GroupBox内的所有控件进行计数

    private void Form1_Load(object sender, EventArgs e)
    {
        var c = GetAll(this,typeof(TextBox));
        MessageBox.Show("Total Controls: " + c.Count());
    }
    

    而且每次都返回正确的计数,所以我认为这将完全适合您要查找的内容:)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看