我的winForm里面有15个列表框...我正在使用它来清除它们中的每一个。有什么办法可以在应用程序启动时以简短的方式清除它们吗?
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
listBox4.Items.Clear();
listBox5.Items.Clear();
listBox6.Items.Clear();
listBox7.Items.Clear();
listBox8.Items.Clear();
listBox9.Items.Clear();
listBox10.Items.Clear();
答案 0 :(得分:7)
parentControl.Controls.OfType<ListBox>().ToList().ForEach(l => l.Items.Clear());
答案 1 :(得分:3)
如果要清除整个表单的所有列表框,可以使用以下内容:
foreach(var listbox in this.Traverse().OfType<ListBox>())
listbox.Items.Clear();
在那里,我使用Traverse
辅助方法来递归地获取特定控件的所有子项。这是它的实现:
public static IEnumerable<Control> Traverse(this Control root)
{
var stack = new Stack<Control>();
stack.Push(root);
while (stack.Any())
{
var next = stack.Pop();
foreach (Control children in next.Controls)
stack.Push(children);
yield return next;
}
}
如果您不想清除所有列表框,而只想清除那些指定的列表框,那么您可以尝试将它们全部放入某个容器中,然后遍历该容器(而不是整个表格),或者如果不可能,你可以将它们全部放在一个集合中并遍历该集合,即:
ListBox[] listboxes = new[]{
listBox1,
listBox2,
//...
};
foreach(var listbox in listboxes)
listbox.Items.Clear();
答案 2 :(得分:0)
如果所有控件都采用相同的形式(让我们调用此form1)
foreach (Control c in form1.Controls)
{
if (c is ListBox)
{
((ListBox)c).Clear();
}
}
答案 3 :(得分:0)
如果您发现自己在代码中反复清除它们并且希望对工作进行分区,请进行方法调用以减少代码重用。
private void ClearList()
{
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
listBox4.Items.Clear();
listBox5.Items.Clear();
listBox6.Items.Clear();
listBox7.Items.Clear();
listBox8.Items.Clear();
listBox9.Items.Clear();
listBox10.Items.Clear();
}
否则,将它们放入集合中。