2

私にはFlowlayoutpanel未知数の子供がいます。すべての子を取得するにはどうすればよいですか? これまでのところ、これを試してみましたが成功しませんでした:

private LoopReturn(Control control)
{    
    var c = control;

    var list = new List<Control>();

    while (c != null)
    {
        list.Add(c);
        c = c.GetNextControl(c, true);                    
    }

    foreach (var control1 in list)
        Debug.Print(control.Name);  
}

しかし、私は最初の2人の子供しか得ていません。理由を知っている人はいますか?

編集:

私はすべての子供たちのすべての子供たちの子供たちなどに必要です。

4

2 に答える 2

2

これはどう:

var controls = flowLayoutPanel.Controls.OfType<Control>();

これは、現在のアルゴリズムと同様に、階層的ではなく線形であることに注意してください。


レベルに関係なく、すべての子を取得するには、次のようにする必要があります。

private IEnumerable<Control> GetChildren(Control control = null)
{
    if (control == null) control = flowLayoutPanel;

    var list = control.Controls.OfType<Control>().ToList();

    foreach (var child in list)
        list.AddRange(GetChildren(child));

    return list;
}

次に、全体のリストが必要な場合は、次のようにします。

var controls = GetChildren();
于 2013-10-07T18:37:19.907 に答える