[每日一学] Winform开发笔记之不重复打开MDI子窗口。
作者:精品下载站 日期:2020-06-07 00:00:00 浏览:85 分类:涨姿势
昨天发现切换子窗口会出现闪屏等情况,而且还有点延迟,造成卡顿这样子,今早灵光一现,会不会是重复打开了,因为我之前都是直接填充整个父窗口,所以看不到,然后我就取消了Fill,发现还真的是这样,于是百度找了一下,解决方案,然后在CSDN看到了一篇文章,解决了我的问题。
需求描述:在MDI窗体中,子窗体只能被打开一次,如果已有窗体不会在重新创建窗体对象
1 窗体的创建
(1)创建mdi窗体:新建窗体将其名称更改为FormMain,属性IsMdiContainer设置为true
(2)创建子窗体1:新建窗体将其名称更改为childForm1
(3)创建子窗体1:新建窗体将其名称更改为childForm2
(4)增加菜单项tsmi_singleMode,其Text属性设置为单例模式子窗体
(5)增加菜单项tsmi_application,其Text属性设置为函数模式子窗体
(6)增加菜单项tsmi_foreach,其Text属性设置为函数模式子窗体
界面如下:
2 单例模式的实现
(1)在子窗体1中将其构造函数改成private;添加静态成员和静态变量
//私有构造函数 privatechildForm1() { InitializeComponent(); } //私有静态类类型的成员变量 privatestaticchildForm1inquire=null; //公有静态类型成员函数 publicstaticchildForm1GetWindows() { if(inquire==null&&inquire.IsDisposed) { inquire=newchildForm1(); } returninquire; }
(2)父窗体MDI中的为tsmi_singleMode按钮添加Click事件:
privatevoidtsmi_singleMode_Click(objectsender,EventArgse) { childForm1cf1=childForm1.GetWindows(); cf1.MdiParent=this; cf1.Show(); }
3 函数模式之Application.OpenForms实现
使用Application.OpenForms来判断是否创建新的子窗体
//使用Application搜集已经打开的子窗体;若找不到就创建;找到则显示 privatevoidtsmi_application_Click(objectsender,EventArgse) { foreach(FormfrminApplication.OpenForms) { if(frmisChildForm2) { frm.Activate(); frm.WindowState=FormWindowState.Normal; return; } } ChildForm2youForm=newChildForm2(); youForm.MdiParent=this; youForm.Show(); }
4 函数模式实现之遍历this.MdiChildren子窗体实现
定义判断函数
privatevoidOpenChildForm(FormformChild)//formChild只是是实例化的但既没有设置为父窗体的子窗体也没有显示 { boolisOpened=false; foreach(Formforminthis.MdiChildren) { //如果要显示的子窗体已经在父窗体的子窗体数组数组中,我们就把新建的多余的formChild销毁 if(formChild.Name==form.Name) { form.Activate();//既然我们想新建但已经有了,那就把之前存在的激活并调到最前边来 form.WindowState=FormWindowState.Normal;//窗口大小为窗口模式 formChild.Dispose(); isOpened=true;//表示窗口已经打开 break; } } if(!isOpened)//如果没打开 { formChild.MdiParent=this;//设置为子窗体 formChild.Show(); } }
添加点击事件
privatevoidtmsi_foreach_Click(objectsender,EventArgse) { childForm3cf3=newchildForm3(); cf3.Name="childForm3"; OpenChildForm(cf3); }
5 总结
列举了三种实现方式,第一种将类定义为私有构造函数、私有静态成员和公有静态成员的单例模式来实现;方法二遍历Application.OpenForms判断子窗体是否打开;方法三,遍历this.MdiChildren判断子窗体是否存在
原文链接:https://blog.csdn.net/m1m2m3mmm/article/details/90551875
猜你还喜欢
- 02-18 [驾车常识] 这3种违章务必15天内处理,否则或面临罚金翻倍?这是真的吗?
- 02-18 [驾车常识] 等红灯时前车出毛病不动了,后车实线变道被记3分?交警会如何判罚你知道吗?
- 02-18 [驾车常识] 高速上这些“新路标”80%的车主看不懂,你是其中的25%的人吗?
- 02-18 [涨姿势] 开车被追尾,若对方全责,记得多说这3句话,或能多拿到几笔赔偿 ,知道了吗?
- 02-18 [驾车常识] 两车同时并线,发生事故到底谁负责?看完就懂了
- 12-14 [涨姿势] 古埃及神庙发现的可能是克利奥帕特拉七世的半身像
- 12-14 [涨姿势] 谷歌的新型量子芯片解决了最好的超级计算机需要宇宙年龄四万亿倍才能破解的问题
- 12-14 [涨姿势] 新研究揭示了古代“天空圆盘”是如何制造的,粉碎了它是赝品的说法
- 12-14 [涨姿势] 器官芯片显示,眼镜蛇毒液通过血管塌陷而致人死亡
- 12-14 [涨姿势] 2000年前的岩石艺术,包括近140英尺长的蛇,可能标志着哥伦比亚和委内瑞拉的古代领土
- 12-14 [涨姿势] 嵌入人类基因组中的“化石病毒”与精神疾病有关
- 12-14 [涨姿势] 美国最新一例人类 H5N1 禽流感病例是第一个引起呼吸道症状的病例
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[韩剧] 宝物岛/宝藏岛/金银岛(2025)【全16集】【朴炯植/悬疑】
[电影] 愤怒的牦牛 (2025) 国语中字 4k
[短剧合集] 2025年05月30日 精选+付费短剧推荐56部
[软件合集] 25年5月30日 精选软件26个
[软件合集] 25年5月29日 精选软件18个
[短剧合集] 2025年05月28日 精选+付费短剧推荐38部
[软件合集] 25年5月28日 精选软件37个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag