非常奇怪的问题,有关资源释放的问题
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 时自动从父控件中移除
------解决方案--------------------不能访问已被回收的对象
------解决方案--------------------