C# 尝试清除面板中所有彩色标签时出错

C# 尝试清除面板中所有彩色标签时出错,c#,visual-studio,winforms,C#,Visual Studio,Winforms,我想清除面板中的所有对象,除了我的绿色按钮和分数标签。换句话说,我想清除所有的红色和蓝色标签。但当我尝试使用foreach时,没有正常工作(只清理了一半标签) 这是我的密码,我不知道这里出了什么问题 foreach (Control coloredLable in panel1.Controls) { if (coloredLable is Label && coloredLable.Text == "") { if (status

我想清除面板中的所有对象,除了我的绿色按钮和分数标签。换句话说,我想清除所有的红色和蓝色标签。但当我尝试使用foreach时,没有正常工作(只清理了一半标签)

这是我的密码,我不知道这里出了什么问题

foreach (Control coloredLable in panel1.Controls)
{
   if (coloredLable is Label && coloredLable.Text == "")
   {
       if (status == false){
           panel1.Controls.Remove(coloredLable);
       }  
   }
}  

我已经确保我所有的彩色标签里面没有任何文字,但它仍然不能正常工作。有人能告诉我这里出了什么问题吗?

您只是错过了在删除后调用dispose方法以释放控件使用的所有资源的操作:

panel1.Dispose();  

您可以参考以下代码删除面板中不必要的标签

 private void button1_Click(object sender, EventArgs e)
        {

            var controls = panel1.Controls;
            for (int i = 0; i < controls.Count; i++)
            {
                if (controls[i] is Label&&controls[i].BackColor!=Color.Green&&controls[i].Text=="")
                {
                    panel1.Controls.Remove(controls[i]);
                    i--;
                }
            }
        }
private void按钮1\u单击(对象发送者,事件参数e)
{
var控制=面板1.控制;
for(int i=0;i
结果:


错误是什么?有时只清除左侧标签,有时只清除右侧标签(不是全部)。什么是
状态
?您如何设置
状态
显示了如何正确执行此操作。这个问题是关于一个你还没有发现的bug,你必须使用Dispose()而不是Remove()。嗯,我不想移除面板,我只想移除面板内的彩色标签对不起,那应该是你的面板按钮。