0

我的 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

4 回答 4

7
parentControl.Controls.OfType<ListBox>().ToList().ForEach(l => l.Items.Clear());
于 2013-08-09T16:44:07.587 回答
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();
于 2013-08-09T16:46:19.487 回答
0

如果所有控件都在同一个表单中(让我们称之为表单1)

        foreach (Control c in form1.Controls)
        {
            if (c is ListBox)
            {
                ((ListBox)c).Clear();
            }
        }
于 2013-08-09T16:46:05.130 回答
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();
    }

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

于 2013-08-09T16:46:39.547 回答