WinForm 创建窗口句柄时出错
今天遇到一个问题,见上图,控件是自己写的,不是标准的控件 在执行Controls.Add(control),出现上述问题。
问题的具体描述:根据条件设置移除和加入不同的控件,当前控件不满足条件时,将控件移除,然后加入新的控件。
代码如下:
if (this.Panel.Controls.Contains(this.R_Parameter))
{
this.Panel.Controls.Remove(this.R_Parameter);
R_Parameter.Dispose();
}
this.RMC_Parameter = new MODE_CONFIG();
this.Panel.Controls.Add(R_Parameter);
有人提出解决问题的思路是重写报错控件的CreateHandle()方法,代码如下:
protected override void CreateHandle()
{
if (!IsHandleCreated)
{
try
{
base.CreateHandle();
}
catch { }
finally
{
if (!IsHandleCreated)
{
base.RecreateHandle();
}
}
}
}
经过测试有所好转,反复测试几次后,问题又出现了。事实证明有所好转,但是没有解决根本的原因。
后来再查找资料的时候,有人提出,导致这问题出现的原因是被移除的控件没有释放。于是增加Dispose()方法,代码如下:
if (this.Panel.Controls.Contains(this.R_Parameter))
{
this.Panel.Controls.Remove(this.R_Parameter);
R_Parameter.Dispose();
}
this.RMC_Parameter = new MODE_CONFIG();
this.Panel.Controls.Add(R_Parameter);
再次测试,发现问题解决了,反复几次都没有出现。
然后注释掉CreateHandle()方法,再测试发现问题又出现了,所以重写CreateHandle()这个方法是有意义的。
文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。
原文链接:wanghao.blog.csdn.net/article/details/107125867
- 点赞
- 收藏
- 关注作者
评论(0)