我有一个包含未知数量儿童的Flowlayoutpanel。我怎样才能找回所有孩子?到目前为止,我已经尝试过这个并没有成功:
private LoopReturn(Control control)
{
Control c = control;
var ls = new List<Control>();
while (c != null)
{
ls.Add(c);
c = c.GetNextControl(c, true);
}
foreach (Control control1 in ls)
{
Debug.Print(control.Name);
}
}
但我只得到前两个孩子。有人知道为什么吗?
修改
我需要所有孩子的孩子的孩子等。
答案 0 :(得分:2)
这个怎么样:
var controls = this.flowLayoutPanel.Controls.OfType<Control>();
请记住,这是线性的,而不是分层的,就像你现在的算法一样。
为了让所有孩子,无论级别如何,你都需要做这样的事情:
private IEnumerable<Control> GetChildren(Control ctrl = null)
{
if (ctrl == null) { ctrl = this.flowLayoutPanel; }
List<Control> list = ctrl.Controls.OfType<Control>().ToList();
foreach (var child in list)
{
list.AddRange(GetChildren(child));
}
return list;
}
然后当您想要整体列表时,只需执行以下操作:
var ctrls = GetChildren();
答案 1 :(得分:1)
递归函数可以工作:
private IEnumerable<Control> ChildControls(Control parent) {
List<Control> controls = new List<Control>();
controls.Add(parent);
foreach (Control ctrl in parent.Controls) {
controls.AddRange(ChildControls(ctrl));
}
return controls;
}
然后调用它:
foreach (Control ctrl in ChildControls(flowLayoutPanel1)) {
Debug.Print(ctrl.Name);
}