在做winform程序的时候,需要用到MDI窗体,在网上看了一些避免子窗体重复打开的问题。

现在我有一个MDI窗体formfather以及两个子窗体form1和form2。
在父窗体上弄两个按钮,点击按钮1的时候显示form1,点击按钮2的时候显示form2,再一次点击的时候显示form1,而不是一个新的form1。
下面是我的代码

private void toolStripButton1_Click(object sender, EventArgs e){Form1 f1 = new Form1();bool isOpened = false;//定义子窗体打开标记,默认值为falseforeach (Form f in this.MdiChildren)//循环MDI中的所有子窗体{if (f1.Name == f.Name)//若该子窗体已被打开{f.Activate();//激活该窗体isOpened = true;//设置子窗体的打开标记为truef1.Dispose();//销毁formChild实例break;}}if (!isOpened)//若该子窗体未打开,则显示该子窗体{f1.MdiParent = this;f1.FormBorderStyle = FormBorderStyle.None;//设置子窗体无边框f1.Dock = DockStyle.Fill;//设置子窗体填满MDI窗体f1.Show();}private void toolStripButton2_Click(object sender, EventArgs e){Form2 df = new Form2 ();bool isOpened = false;//定义子窗体打开标记,默认值为falseforeach (Form f in this.MdiChildren)//循环MDI中的所有子窗体{if (df.Name == f.Name)//若该子窗体已被打开{f.Activate();//激活该窗体isOpened = true;//设置子窗体的打开标记为truedf.Dispose();//销毁formChild实例break;}}if (!isOpened)//若该子窗体未打开,则显示该子窗体{df.MdiParent = this;df.FormBorderStyle = FormBorderStyle.None;df.Dock = DockStyle.Fill;df.Show();}}

看别人的代码在代码块写激活窗体时用的是f1.Activate,这样是无法成功再次激活得窗体的,后来想了下,可能因为f1是new的窗体,而我们要打开的应该是已经是已经存在的f1窗体,即是我们foreach到的f窗体才是。

自己的想法,不知道对不对,记录在此供自己以后查看,也希望大家指正

C#MDI窗体避免重复打开子窗体的问题相关推荐

  1. RefreshParenwin 打开子窗体 并回发

    ParentWin: <input id="btnOpenWin" type="button" value="打开子窗体" οncli ...

  2. 多窗体、窗体传值、打开唯一窗体操作

    多窗体.窗体传值.打开唯一窗体操作 一.打开多子窗口 在控件中实例化要打开的窗体,再调方法show 例:在按钮中打开f2窗体 form2 f2=new form2() f2.show() 二.构造函数 ...

  3. VS2017 .NET C# MDI窗体菜单,隐藏子窗体ICON图标

    最近在做项目的时候,发现MDI父窗体的主菜单的左边,当子窗体最大化的时候,显示了子窗体的图标ICON. 解决办法,在主菜单的ItemAdded事件编写如下代码: private void Main_M ...

  4. C# Winform 防止MDI子窗体重复打开

    可以在MDI主窗体中添加以下方法. //防止打开多个窗体private bool ShowChildrenForm(string p_ChildrenFormText){int i;//依次检测当前窗 ...

  5. html 判断当前窗口是否是子窗口,C#的MDI窗体判断子窗体是否已经打开

    Mdi窗体的设置: IsMdiContainer 设置为true: 子窗体设置: /// /// 显示子窗体 /// /// private void ShowForm(BaseForm _bt) { ...

  6. 机房收费系统-- MDI子窗体显示技巧

    我们所做的机房收费系统,是运用的MDI多窗体方式,对多类数据进行存取和查询!在窗体显示设置上主要会遇到这样两个问题: 一. 程序运行后,为达到使用效率高的目的,父窗体显示一个" 学生刷卡上下 ...

  7. Windows应用程序C#创建MDI父窗体和子窗体

    一:创建父窗体 1.创建 Windows 应用程序. 2.在"属性"窗口中,将 IsMDIContainer 属性设置为true. 这将该窗体指定为子窗口的MDI 容器. 3.设置 ...

  8. Delphi中MDI父窗体与子窗体菜单合并

    如果你写的MDI程序中,要将父窗体与子窗体菜单融合在一起,Delphi提供了非常方便的方法.将父窗口的上级菜单比方说"File"文件,有个属性GroupIndex,设为0,将子窗体 ...

  9. 在主窗体中打开一个新子窗体,如果已有子窗体,则激活它,而不打开新的。...

    frmGroupMgr fgm = null; //遍历窗体中是否已存在同名的子窗体 foreach (Form f in this.MdiChildren) { //检测是不是当前子窗体名称 if ...

最新文章

  1. 从delphi到C++Builder
  2. R语言入门3---R语言六大基本数据结构
  3. 93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?
  4. java中判断一个字符在字符串中出现的次数
  5. MySQL的chap服务器_路由器chap的双向配置命令
  6. (js技巧)input文本框回车或者失去光标触发事件
  7. 基于php的购物网站源代码,[内附完整源码和文档] 基于PHP的网上购物系统设计与实现...
  8. 浏览器与输入法——用户入口的争夺
  9. 第一次发博客,随便说说
  10. arm板linux内核移植,ARM开发板上uClinux内核移植
  11. 最新WIN10系统封装教程2019系列(七)——封装
  12. 圣诞邀请助力活动H5系统开发
  13. 简历||STAR法则
  14. 好分数一个等第是什么意思_DPI是什么意思 鼠标DPI越高越好吗?
  15. 【JVM】类加载系统
  16. python爬取携程酒店评论_python爬取携程酒店列表
  17. python画一个点_python中画散点图
  18. web前端:视频背景(铺满整个网页)
  19. 教你使用 koa2 + vite + ts + vue3 + pinia 构建前端 SSR 企业级项目
  20. 西北乱跑娃 -- VUE3引入echarts

热门文章

  1. MacPorts基础教程
  2. 阅读视图用于自己在个人计算机,2018年秋西南大学在线作业解析[1055]《powerpoint多媒体课件制作》.doc...
  3. 一个中兴员工的自述:17.5巨亏根源来自内部腐败
  4. Namecheap域名如何购买?步骤和注意事项附优惠码
  5. 马德:别人不是你的彼岸
  6. 国二c语言题型,计算机二级C语言题型和评分标准
  7. 信息化项目风险控制与应用
  8. 有了“互联网+”,政务服务还需要集中到大厅吗?
  9. Web3j签名与验签
  10. WPF ComboBox