winform程序提示“创建窗口句柄时出错”bug
2015-02-05 18:04
489 查看
出现bug的原因是我点击Main form中一个按钮,弹出一个form窗口A,然后A关闭的时候,返回Main。然后发现操作的次数多了就会出现上述bug,刚开始以为是创建句柄出错,写了下面一段代码:
/*窗体在InitializeComponent()的时候如果创建不成功,尝试在Form的子类中重写CreateHandle,如果创建不成功,通过RecreateHandle,一般都会成功的 */ protected override void CreateHandle() { if (!IsHandleCreated) { try { base.CreateHandle(); } catch { } finally { if (!IsHandleCreated) { base.RecreateHandle(); } } } }
不过后来发现还是不管用,就以为是需要dispose操作,所以又加了一段代码:
using (AForm A = new AForm()) { A.ShowDialog(this.Parent.Parent); }
但是,后来经过测试,发现还是不行,最后,我觉得可能是从A返回Main的时候,是在Main的父窗口中new的Main,因此又换了种形式。
先在A中,定义一个事件委托,用于进入Main的load方法,更新Main中的数据,代码如下:
public event EventHandler LoadHandler; // 用于调用父窗体load事件委托
public void btnSave_Click(object sender, EventArgs e) { SaveData(); this.Close(); MessageBox.Show("数据保存成功!"); this.Dispose(); if (LoadHandler != null) { LoadHandler(sender, e); } }
然后在AForm的click事件中添加如下代码: private void lbl_edit1_Click(object sender, EventArgs e) { using (AForm A = new AForm()) { A.LoadHandler += this.AForm_Load; A.ShowDialog(this.Parent.Parent); } }
经过这三处代码的修改,发现此bug解决了!!!
相关文章推荐
- 处理WinForm多线程程序时的陷阱,出现窗口句柄为创建就被访问
- C#中出现了一个问题,就是程序主窗体已经打开,在调用子窗体时候出现了创建窗口句柄时出错。
- C#中提示:创建窗口句柄时出错。解决方案 只是用于我这个情况
- 屏蔽Winform的关闭按钮与“创建窗口句柄时出错”
- 屏蔽Winform的关闭按钮与“创建窗口句柄时出错” (转)
- SQL Server 2008安装程序失败在创建窗口句柄之前不能在控件上调用 Invoke 或 BeginInvoke
- 创建窗口句柄时出错。
- WinForm程序或WPF程序只能打开一个子窗体 解决窗口关闭不能再打开的BUG
- “创建窗口句柄时出错” -- 不要过份相信垃圾回收
- Win32Exception 创建窗口句柄时出错
- SQL SERVER 2008 安装出错 在窗口创建句柄之前,不能调用invoke he beg...
- 安装出错提示:"以前的某个程序安装已在安装计算机上创建挂起的文件操作"
- 创建窗口句柄时出错(error creating window handle)
- 创建窗口句柄时出错。(未处理 Win32Exception)
- 【技术贴】解决打开程序出错,提示错误429,activex部件不能创建对象,不用重装系统。
- 小知识总结--winform 类似QQ的右下角提示窗口不会被其他程序挡住方法
- C#中动态创建控件 出现创建窗口句柄出错问题解决。
- “创建窗口句柄时出错”的问题
- VS.NET提示"试图运行项目时出错:无法启动调试。绑定句柄无效"解决办法
- 创建你的第一个带有窗口的Windows程序