有什么方法可以在短时间内清除所有列表框吗

本文关键字:清除 列表 短时间 什么 方法 | 更新日期: 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();
    }

否则,将它们放入集合中。