【问题标题】:How to determine if a Control is a Container for other Controls如何确定一个控件是否是其他控件的容器
【发布时间】:2014-04-03 18:45:44
【问题描述】:

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

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

好的,但事实证明GroupBox 控件不是从ContainerControl 派生的。它直接派生自Control

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

【问题讨论】:

    标签: c# .net winforms controls


    【解决方案1】:

    您可以使用Control.HasChildren 属性:

    如果此控件的集合中有子控件,则为真。

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

    【讨论】:

    • 啊,没错。事实上,我看到所有控件都有一个Controls 集合属性。稍微重新考虑一下。谢谢。
    【解决方案2】:
        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);
    

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2018-11-23
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多