有什么方法可以在短时间内清除所有列表框吗
本文关键字:清除 列表 短时间 什么 方法 | 更新日期: 2023-09-27 18:27:16
我的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();
parentControl.Controls.OfType<ListBox>().ToList().ForEach(l => l.Items.Clear());
如果你想清除整个表单的所有列表框,你可以使用这样的东西:
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();
如果所有控件都在同一个表单中(让我们调用这个表单1)
foreach (Control c in form1.Controls)
{
if (c is ListBox)
{
((ListBox)c).Clear();
}
}
如果您发现自己在代码中一次又一次地清除它们,并且希望对工作进行分区,请进行方法调用以减少代码重用。
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();
}
否则,将它们放入集合中。