我有一个带有两列的TableLayoutPanel.我想从第二个控件中动态删除所有控件.有没有简单的方法?我真的不希望这样繁琐的循环.
编辑:
“循环”是指实际上编写for循环.在后台循环的LINQ解决方案非常好.
解决方法:
它在很大程度上取决于您的意思:“清除列”.在此示例中,我选择将可见性设置为false.
这看起来真的很可怕:
// grab all controls from Colum 2 (index == 1)
List<Control> Col_2_Stuff = tableLayoutPanel1.Controls.OfType<Control>()
.Where(x => tableLayoutPanel1.GetPositionFromControl(x).Column == 1).ToList();
// make them invisible
Col_2_Stuff.Select(c => { c.Visible = false; c = null; return c; }).ToList();
但这确实起作用
编辑:
这是实际删除它们的行:
Col_2_Stuff.Select(c => { tableLayoutPanel1.Controls.Remove(c); return c; }).ToList();
受到@LarsTech的启发:您还可以稍后调用dispose并清除列表
Col_2_Stuff.Select(c => { tableLayoutPanel1.Controls.Remove(c); c.Dispose(); return c; }).ToList();
Col_2_Stuff.Clear();