如何确定Control是否是其他控件的容器

时间:2014-04-03 18:45:45

标签: c# .net winforms controls

我正在编写代码来遍历表单上的所有控件。除了Form.Controls集合不包含其他控件包含的控件外,这似乎很简单。

好的,所以我尝试测试是否每个ctl is ContainerControl,如果是,则递归迭代该容器控件中的控件。

好的,但事实证明GroupBox控件并非来自ContainerControl。它直接来自Control

我的代码是否有通用的方法来确定给定的控件是否包含其他控件?我假设有一个基本类型或接口可以做到这一点,但似乎并非如此。

2 个答案:

答案 0 :(得分:2)

您可以使用Control.HasChildren属性:

  

如果此控件在其集合中具有子控件,则为True。

if (ctl.HasChildren)
{
    // true, if ctl has controls in it
}

答案 1 :(得分:0)

    List<Control> AllFormsControl = new List<Control>();
    public void InitContolList(Control nControl)
    {
        if (nControl.Controls.Count > 0)
        {
            foreach (Control item in nControl.Controls)
            {
                 InitContolList(item);
                AllFormsControl.Add(item);
            }

        }
      // Optional
      //AllFormsControl.Add(nControl);
    }

然后你可以跑:

    InitControlList(this);
祝你好运。