日期:2014-05-18  浏览次数:20659 次

非常奇怪的问题,有关资源释放的问题
if   (this.Controls.Count   >   0)   {     //描绘之前将现有已经创建的button释放
                                CtlNum   =   this.Controls.Count;
                                for   (i   =   0;   i   <   CtlNum;   i++)   {
                                    this.Controls[i].Dispose();

                                }
                                this.Controls.Clear();
                        }
                     
                        for   (i   =   StartNum;   i   <   DisplayNum;   i++)   {
           
                                abton   =   new   button();
                                abton.Name   =   "abton "   +   i.ToString();;
                                                       
                                  this.Controls.Add(abton);
                                       
                                }
                               
                        }
这些代码是放在自绘控件的onpaint里,编译顺利通过,只是在将该控件放到form里,发生运行时错误,报错为 "Cannot   access   a   disposed   object.
Object   name:   'Button ' ".郁闷死我,不知道什么原因,按理由,不该报错的.找了1天,找不出原因

------解决方案--------------------
不是很明白!
------解决方案--------------------
不知道,up!
------解决方案--------------------
要先收集子控件到数组,然后clear,然后用数组调用disposed。clear内部会访问子控件的属性,所以出异常。
------解决方案--------------------
学习中~~
友情UP
------解决方案--------------------
Control[] controls = new Control[panel1.Controls.Count];
panel1.Controls.CopyTo(controls, 0);

foreach (Control c in controls)
{
c.Dispose();
}


不用 clear,dispose 时自动从父控件中移除

------解决方案--------------------
不能访问已被回收的对象

------解决方案--------------------