有没有办法清除所有列表框的简短方法?

时间:2013-08-09 16:41:57

标签: c# listbox

我的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();

4 个答案:

答案 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();
    }

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