foreach (Control con in panel1.Controls)
              {                      panel1.Controls.Remove(con);              }
我先是在panel1里动态生成了一组picturebox,现在需要删除它们,按照上面的代码,执行后重新动态生成新的一组picturebox,但是为什么旧的picturebox有些还在,而且更怪异的是第一组picturebox中的奇数没有了,偶数的还在。
诚心求教,望高人解答

解决方案 »

  1.   

    foreach (Control con in panel1.Controls)
      {  panel1.Controls.Remove(con);  }
    是这样执行的: 假设panel1.Controls 有控件 1 2 3 4 5第一次 删除 索引 0 的 控件 1==》 panel1.Controls 有控件  2 3 4 5
    此时 索引会++ 
    第2此删除 索引 1 的 控件3 ==》 panel1.Controls 有控件  2  4 5
    此时 索引会++ 
    第3此删除 索引 2 的 控件5 ==》 panel1.Controls 有控件  2  4 
    退出循环==》 你可以这样操作:for (int i=0;i<panel1.Controls.Count;i++)
      {  panel1.Controls.Remove(panel1.Controls[i]);
    i--; // 让索引减一  }
      

  2.   

    int u = panel1.Controls.Count;
                for (int i = 0; i < u; i++)
                {
                    if (panel1.Controls[i].GetType().Name.Equals("PictureBox"))
                    {
                        panel1.Controls.RemoveAt(i);
                        i--;
                        u--;
                    }
                }简单试了下,可以