如何检索父控件及其子控件 - Winforms C#2

时间:2010-11-19 13:08:14

标签: winforms c#-2.0

我想检索表单的控件。要做到这一点:

internal static IEnumerable<Control> EnumereTousControle(Control controleParent)
{
    foreach (Control subControl in controleParent.Controls)
    {
        yield return subControl;

        foreach (Control c in EnumereTousControle(subControl))
            yield return c;
    }
}

它工作正常,检索父控件的所有子项。但是我需要这个方法也返回父控件。我试过这个,但它不起作用(因为该方法是递归的):

internal static IEnumerable<Control> EnumereAllControls(Control parentControl)
{
    yield return parentControl; // does not work

    foreach (Control subControl in parentControl.Controls)
    {
        yield return subControl;

        foreach (Control c in EnumereAllControls(subControl))
            yield return c;
    }
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

你只有一行太多,试试这个:

internal static IEnumerable<Control> EnumereAllControls(Control parentControl)
{
    yield return parentControl;

    foreach (Control subControl in parentControl.Controls)
    {
        foreach (Control c in EnumereAllControls(subControl))
            yield return c;
    }
}

答案 1 :(得分:2)

    internal static IEnumerable<Control> EnumereTousControle(Control controleParent) {
        yield return controleParent;
        foreach (Control ctl in controleParent.Controls) {
            foreach (Control child in EnumereTousControle(ctl)) 
                yield return child;
        }
    }

嗯,同样的事情减去你得到的额外收益。

答案 2 :(得分:0)

如果不是约束,您可以将父控件添加到方法外部的结果中。