CMDI窗体避免重复打开子窗体的问题

CMDI窗体避免重复打开子窗体的问题在做 winform 程序的时候 需要用到 MDI 窗体 在网上看了一些避免子窗体重复打开的问题 现在我有一个 MDI 窗体 formfather 以及两个子窗体 form1 和 form2 在父窗体上弄两个按钮 点击按钮 1 的时候显示 form1 点击按钮 2 的时候显示 form2 再一次点击的时候显示 form1 而不是一个新的 form1 下面是我的代码 privatevoidt Cl

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

private void toolStripButton1_Click(object sender, EventArgs e) { Form1 f1 = new Form1(); bool isOpened = false;//定义子窗体打开标记,默认值为false foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体 { if (f1.Name == f.Name)//若该子窗体已被打开 { f.Activate();//激活该窗体 isOpened = true;//设置子窗体的打开标记为true f1.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;//定义子窗体打开标记,默认值为false foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体 { if (df.Name == f.Name)//若该子窗体已被打开 { f.Activate();//激活该窗体 isOpened = true;//设置子窗体的打开标记为true df.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窗体才是。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232025.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月6日 下午2:01
下一篇 2025年11月6日 下午2:22


相关推荐

  • AFL分享

    AFL分享Fuzzing 是漏洞挖掘领域最有效的方法之一 可以用来发现大量的远程代码执行和提权的漏洞 然而 fuzzing 优势相对肤浅和盲目的 随机变异使得我们很难实现达到测试程序特定的代码路径 这就使得测试的代码覆盖率很低 有很多人试图去解决这个问题 TavisOrmandy 曾经提出一种 根据代码覆盖率 从大量高质量的输入文件语料中选取一个子集 然后按照传统方法去 fuzz 这种方法很有效 但前提是需要一个这样的语料 另一方面 代码覆盖率只提供了一个很简单的对程序状态的描述 当 Fuzzing 测试到了一定的程度 代码

    2026年3月19日
    2
  • html中滚动条的代码是什么?如何设置html滚动条?

    html中滚动条的代码是什么?如何设置html滚动条?本篇文章主要介绍了关于 html 中的滚动条的代码 还有关于 html 滚动条代码 marquee 标签属性的用法 具体的让我们一起来看这篇文章吧首先我们介绍 html 中的滚动条代码 今天我们介绍这个 html 滚动条标签是 marquee marquee 标签 它是成对出现的标签 首标签 marquee 和尾标签 marquee 之间的内容就是滚动内容 marquee 标签的属性主要有 behavior bgcolor direction width height marquee marquee

    2025年7月7日
    5
  • 什么是莫兰指数

    什么是莫兰指数什么是莫兰指数?根据百度百科的定义是“空间自相关系数的一种,其值分布在[-1,1],用于判别空间是否存在自相关。”简单的说就是判定一定范围内的空间实体相互之间是否存在相关关系,比如:一座座居民楼它们是聚集在一块还是离散分布在各处。莫兰指数数值分布在[-1,1],[0,1]说明各地理实体之间存在正相关的关系,[-1,0]之间说明存在负相关的关系,而0值则无相关…

    2022年6月25日
    63
  • 老Java程序员花一天时间写了个飞机大战,很舒服![通俗易懂]

    引言:前两天我发现CSDN上有两篇飞机大战的文章异常火爆,各种指标都很高(阅读、点赞、评论、收藏等),但都是python写的,竟然不是我大Java,说实话作为老java选手,我心里是有那么一些失落的,难道我大java打飞机不行?就算大java打飞机不行,那我用单身30年的打飞机手速,我肯定行(反正我的代码我做主,就是玩!),于是我决定一展伸手,用java写了一个飞机大战。我就问你们我打飞机行不行,我媳妇都说行,你们呢?欢迎我亲爱的大Java选手们点赞+评论+收藏!给我冲、冲、冲。。。/**游戏窗

    2022年4月8日
    138
  • 一、Linux下的SVN服务器搭建

    一、Linux下的SVN服务器搭建这里自己做个总结。环境:contos7,百度云服务下载svn服务器,必须是联网情况下。yum-yinstallsubversion查看下载后的信息,安装位置及详细信息。rpm-qlsubversion3.创建版本库目录,可以再chenjy目录上放置多个项目,不必为每个项目创建一个版本库。下面是我的版本库mkdir/opt/svn/svnrepos/ch…

    2022年7月19日
    17
  • 采用虚拟存储技术_虚拟存储管理

    采用虚拟存储技术_虚拟存储管理虚拟存储技术(VIRTUALMEMORY)所谓的虚拟存储技术是指:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访问的数据不存在内存中时,由操作系统自动完成将它们从磁盘调入内存的工作。虚拟地址空间—–分配给进程的虚拟内存虚拟地址—–在虚拟内存中指令或数据的位置,该位置可以被访问,仿佛它是内存的一部分。

    2026年4月13日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号