質問

I'm writing code to iterate through all controls on a form. This seemed pretty straight forward except that the Form.Controls collection does not include controls that are contained by other controls.

Ok, so I tried testing to see if each ctl is ContainerControl, and if so, recursively iterating through the controls in that container control.

Ok, but it turns out the GroupBox control does not derive from ContainerControl. It derives directly from Control.

Is there any generic way for my code to determine if a given control contains other controls? I assumed there would be a base type or interface that would do this but that doesn't seem to be the case.

役に立ちましたか?

解決

You can use the Control.HasChildren property:

True if this control has child controls in its collection.

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

他のヒント

    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);
    }

Then you may run:

    InitControlList(this);

Good luck.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top