【问题标题】:Error when try to clear all colored lable in a panel尝试清除面板中的所有彩色标签时出错
【发布时间】:2021-03-06 10:23:47
【问题描述】:

我想清除该面板中的所有对象,但我的绿色按钮和分数标签除外。换句话说,我想清除所有红色和蓝色标签。但是当我尝试使用 foreach 进行操作时,无法正常工作(仅清除了我的标签的一半)

这是我的代码,我不知道这里有什么问题。

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

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

【问题讨论】:

  • 错误是什么?
  • 它有时只清除左侧标签,有时只清除右侧标签(不是全部)
  • status 是什么?
  • 你怎么设置status
  • This answer 展示了如何正确执行此操作。这个问题是关于一个你还没有发现的错误,你必须使用 Dispose() 而不是 Remove()。

标签: c# visual-studio winforms


【解决方案1】:

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

 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--;
                }
            }
        }

结果:

【讨论】:

    【解决方案2】:

    你只是缺少了在remove之后调用dispose方法释放控件使用的所有资源的动作:

    panel1.Dispose();  
    

    【讨论】:

    • 嗯我不想移除面板,我只想移除面板内的彩色标签
    • 抱歉,这应该是您的 panelButton。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多