Cha*_*ana 34

Panel和Form类都有一个Controls集合属性,它有一个Clear()方法......

MyPanel.Controls.Clear(); 
Run Code Online (Sandbox Code Playgroud)

要么

MyForm.Controls.Clear();
Run Code Online (Sandbox Code Playgroud)

但是Clear()不打电话dispose()(它所做的就是从集合中移除他的控制权),所以你需要做的就是

   List<Control> ctrls = new List<Control>(MyPanel.Controls);
   MyPanel.Controls.Clear();  
   foreach(Control c in ctrls )
      c.Dispose();
Run Code Online (Sandbox Code Playgroud)

你需要创建一个单独的引用列表,因为Dispose也将从集合中删除控件,更改索引并弄乱foreach ...

  • 你也可以使用反向for循环,它不会搞乱索引;) (8认同)