最近在做一个winform 的项目,由于是需要多页面切换跳转的,所以用了MDI窗体,经常需要子窗体之间跳转,窗体的跳转的代码如下:

FormFaceLogin frm = new FormFaceLogin();
                frm.TopLevel = false;
                frm.Dock = DockStyle.Fill;
                frm.FormBorderStyle = FormBorderStyle.None;
                //设置新窗体的Parent
                frm.Parent = this;
                //释放资源
                foreach (Control item in this.Controls)
                {
                    item.Dispose();
                }
                this.Controls.Clear();
                this.Controls.Add(frm);
                frm.Show();

窗体切换的次数多了,就会报错:创建窗口句柄时出错,尝试了各种办法都没有解决,最后通过断点调试,发现窗体跳转的时候,并没有执行FormClosed方法和FormCloseing方法,然后每一次跳转窗体的时候,就会重新new一次窗体对象,对象一直在增加,但是并没有销毁,知道了问题所在,就好解决了,解放方案如下:

1.新建一个子窗体FrmChild ,在FrmChild 写一个公共的方法:

public void FindChildForm(Type type)
        {
            Form frm = null;

//在当前程序中查找要打开的窗体是否已经new过,如果已经创建了对象,直接激活,否则创建。
            foreach (Form frmChild in Application.OpenForms)
            {
                if (frmChild.GetType() == type)
                {
                    frm = frmChild;
                    frm.BringToFront();
                    frm.Activate();
                }
            }
            if (frm == null)
            {
                frm = (Form)Activator.CreateInstance(type);
                frm.TopLevel = false;
                frm.Dock = DockStyle.Fill;
                frm.FormBorderStyle = FormBorderStyle.None;
                frm.Parent = FormMdi.GetPanel;//此处在FormMdi窗体设置子窗体时,记录了控件的父容器,所有子窗体的父容器都为FormMdi.GetPanel
                frm.BringToFront();
                frm.Show();
            }
        }

2.所有的子窗体都继承FrmChild ,在窗体跳转时,直接调用FindChildForm方法:

FindChildForm(typeof(FormCardIndex));

winform 创建窗口句柄时出错相关推荐

  1. devexpress 创建窗口句柄时出错_实验一 线程的创建和撤销

    实验内容:编写和调试一个程序,实现Windows系统环境下通过API函数进行线程创建与撤销. 实验目的: (1) 熟悉Windows系统提供的线程创建和撤销系统调用: (2) 掌握Windows系统环 ...

  2. devexpress 创建窗口句柄时出错_MATLAB函数句柄

    1.何为函数句柄? 函数句柄也是MATLAB中的一种常见的数据类型, 它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或者函数引用(Perl). 它 ...

  3. System.ComponentModel.Win32Exception:“创建窗口句柄时出错。 如何解决

    琢磨两天终于已解决. 原来原因是用了第三方控件的原因. 换了datagridview 框架本身的控件就可以了.

  4. 创建窗体时出错。有关详细信息,请参阅 Exception.InnerException

    创建窗体时出错.有关详细信息,请参阅 Exception.InnerException.错误为: 未能加载文件或程序集"xxx, Version=1.0.0.0, Culture=neutr ...

  5. mysql中创建视图语法错误_mysql - 使用过程MySQL创建视图时出错 - 堆栈内存溢出

    尝试使用过程创建视图时出现问题. 我必须这样做,因为我需要在MySQL中发挥作用,将表的行转换为另一个表的列. 该查询效果很好,但是当我将其放在" CREATE VIEW"语句中时 ...

  6. lucene创建索引时出错:扑捉到FileNotFoundException

    lucene创建索引文件出错,如下图: 解决方案: 解锁即可 代码如下: bool isUpdate = IndexReader.IndexExists(directory);if (isUpdate ...

  7. 思科交换机创建Vlan时出错的解决方法(一)

    目录 问题 解决思路 解决问题 总结 问题 思科2960机器恢复出厂设置后无法新建VLAN.问题复现如下: (根因:VTP服务错误) Switch(config)#vlan 175 VTP VLAN ...

  8. 思科交换机创建Vlan时出错的解决方法(二)

    目录 问题 解决思路 总结 问题 思科3560机器,当配置多个vlan时候,在鍵入exit或apply时候经常会出现下面的出错信息,使得无法创建新的vlan.问题复现如下: 根因:存储空间不足 SW1 ...

  9. mysql 创建触发器出错_mysql-在phpmyadmin中创建触发器时出错

    我创建了非常简单的触发器,我认为syntex也正确: CREATE TRIGGER trig1 after INSERT ON urlcontent for each row BEGIN insert ...

最新文章

  1. WordPress制作圆形头像友情链接页面的方法
  2. Python2、Python3相对路径、绝对路径导入
  3. 1.3 继承(extends)
  4. 嵌入式Linux之旅——环境搭建篇之烧写整个系统
  5. mysql数据库增删改查关键字_Mysql数据库,增删改查笔记(非常重要)-阿里云开发者社区...
  6. java接口返回类,Java接口和返回类型 - java
  7. proc wifi 开启_49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)...
  8. ubuntu装指定分区_Ubuntu安装过程中如何手动指定分区
  9. matlab tic和toc单位,matlab toc tic 的用法
  10. B.系数(mod意义下的系数转化+lucas)
  11. Windows 10与微软公有云Azure
  12. 数贝携手付晓岩老师带你玩转“企业架构”
  13. js html占位符,JavaScript占位符
  14. 【Verilog数字系统设计(夏雨闻)5-------模块的结构、数据类型、变量和基本运算符号1】
  15. 【WLAN】【测试】Linux下aircrack-ng的应用之空口抓包全解
  16. 微信小程序中定位报错在app.json中声明permission字段
  17. 概率论与数理统计-下篇
  18. 仅用半年时间,我的月薪从3K飞跃到17K,纵有疾风起,人生不言弃
  19. 【docker】——docker项目中使用phantomjs实现网页快照缩略图
  20. Java初学Text10---SOSO营业厅系统

热门文章

  1. 「 机器人学 」“里程计/仪技术”浅谈
  2. DWARF调试格式的简介
  3. 解决The plain HTTP request was sent to HTTPS port
  4. L19-python核心编程-面向对象编程(day1、2)
  5. linux项目部署、Nginx详解
  6. 为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数?
  7. Unity代码自动生成
  8. 17 -> 详解 openWRT 的 gpio 配置关系说明
  9. 数据结构 PTA 绪论
  10. HDFS心跳机制是什么?