C# Winform父窗体打开新的子窗体前,关闭其他子窗体

        随着Winform项目越来越多,界面上显示的窗体越来越多,窗体管理变得更加繁琐。有时候我们要打开新窗体,然后关闭多余的其他窗体,这个时候如果一个一个去关闭就会变得很麻烦,而且可能还会出现遗漏的情况。这篇文章介绍了三种方式实现"Winform父窗体打开新的子窗体前,关闭其他子窗体"的方案。

代码:

   public partial class MainForm : Form{private UserControl userControl;private UserControl1 userControl1;private UserControl2 userControl2;private Form1 form1;private Form2 form2;public MainForm(){InitializeComponent();this.IsMdiContainer = true;userControl1 = new UserControl1();userControl2 = new UserControl2();form1 = new Form1();form2 = new Form2();}private void btnForm1_Click(object sender, EventArgs e){方法一//ShowEmbeddedForm(1);方法二//form1.MdiParent = this;//OpenMdiForm(form1);//方法三OpenNewChildForm(form1);}private void btnForm2_Click(object sender, EventArgs e){方法一//ShowEmbeddedForm(2);方法二//form2.MdiParent = this;//OpenMdiForm(form2);//方法三OpenNewChildForm(form2);}/// <summary>/// 关闭所有子窗体/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnHidden_Click(object sender, EventArgs e){panelForm.Controls.Clear();// 关闭所有子窗体for (int i = Application.OpenForms.Count - 1; i >= 0; i--){var openForm = Application.OpenForms[i];if(openForm!=this){openForm.Close();}}}/// <summary>/// 方法一:使用内嵌方式将控件放入到Panel中,放入前清空Panel中的控件/// </summary>private void ShowEmbeddedForm(int type){panelForm.Controls.Clear();if (type == 1){panelForm.Controls.Add(userControl1);}else if (type == 2){panelForm.Controls.Add(userControl2);}}/// <summary>/// 方法二:使用MDI实现父窗体每次只能显示一个子窗体/// 特点:子窗体内嵌到父窗体中/// </summary>/// <param name="子窗体名称"></param>private void OpenMdiForm(Form frm){//判断是否第一次显示窗体if (this.MdiChildren.Length == 1){frm.MdiParent = this;frm.Show();return;}foreach (Form children in this.MdiChildren){if (frm == children){//如果是现在就存在的子窗体就激活它children.Activate();}else{children.Close();if (frm == null || frm.IsDisposed){Type type = frm.GetType();frm = (Form)System.Activator.CreateInstance(type);frm.MdiParent = this;frm.Show();}else{frm.MdiParent = this;frm.Show();}}}}/// <summary>/// 方法三:使用OpenForms,在打开新窗体前关闭所有打开的子窗体/// </summary>/// <param name="newChildForm"></param>private void OpenNewChildForm(Form newChildForm){// 关闭所有其他的子窗体for (int i = Application.OpenForms.Count-1; i >=0; i--) {var openForm = Application.OpenForms[i];if (openForm != this && openForm != newChildForm){openForm.Close();}}// 打开新的子窗体if (newChildForm == null || newChildForm.IsDisposed){Type type = newChildForm.GetType();newChildForm = (Form)System.Activator.CreateInstance(type);newChildForm.Show();}else{newChildForm.Show();}}}

实例链接:https://download.csdn.net/download/lvxingzhe3/89249982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/661757.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次生产事故的排查和解决

一. 事故概述 春节期间, 生产系统多次出现假死不可用现象, 导致绝大部分业务无法进行. 主要表现现象为接口无法访问. 背景为900W客户表和近实时ES, 以及春节期间疫情导致的普通卖菜场景近似秒杀等. 二. 排查过程 优先排查了info, error, catalina日志, 发现以下异常: 主要的…

C语言——单链表实现数据增删查改

一.前言 嗨嗨嗨&#xff0c;我们又见面了。前面我们已经学习了关于数据结构中的顺序表&#xff0c;今天我们来学习数据结构中的单链表。废话不多说让我们直接开始吧。 二.正文 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺…

【Flask开发实战】HTML模板代码复用之extends使用

一、前言 在 HTML 开发中&#xff0c;尤其是在使用模板引擎&#xff08;如 Jinja2&#xff0c;常用于 Flask 应用&#xff09;时&#xff0c;extends 是一个非常有用的指令&#xff0c;它用于实现模板继承&#xff0c;从而达到代码复用的目的。这可以让你定义一个基本模板&…

三体中的二向箔

目录 描述 外观 基本原理 攻击范围及影响 副作用 保存方式 实战情况 二向箔是在中国科幻名匠刘慈欣的作品《三体3&#xff1a;死神永生》中登场的宇宙规律武器之一。首次出现于一艘来自歌者“母世界”的宇宙飞船。由于宇宙战争愈演愈烈&#xff0c;二向箔对于高等文明而…

Codigger数据篇(下):数据安全的全方位保障

在数字化浪潮中&#xff0c;数据已成为现代企业的核心财富。Codigger作为领先的数据服务平台&#xff0c;深知数据安全对于用户的重要性&#xff0c;因此在深挖数据价值的同时&#xff0c;我们始终坚守数据安全防线。 一、双重加密技术保障 Codigger平台运用先进的加密通信和…

python 基础语句

python 基础语句 1. import 语句 用于导入相应的包以供后面的代码使用 import xxx -将xxx包导入import pandas as pd - 导入 pandas 包并且将其所有的对象、方法、属性赋予 pd 对象from xxx1 import xxx2 - 从xxx1 包中导入 xxx2 方法 2. 输入输出语句 input&#xff0c;pr…

ip ssl证书无限端口网站

IP SSL证书是由CA认证机构颁发的一种特殊数字证书。大部分SSL数字证书都需要用户使用域名进行申请&#xff0c;想要对公网IP地址加密实现https访问就需要申请IP SSL证书。IP SSL证书采用了强大的加密算法&#xff0c;可以有效地防止数据在传输过程中被窃取或篡改&#xff0c;具…

TS学习-泛型基础

目录 1&#xff0c;介绍1&#xff0c;在函数中使用2&#xff0c;在类型别名&#xff0c;接口中使用3&#xff0c;在类中使用 2&#xff0c;泛型约束3&#xff0c;多泛型4&#xff0c;举例实现 Map 1&#xff0c;介绍 泛型相当于是一个类型变量&#xff0c;有时无法预先知道具体…

药品商品名/通用名/化学名/别名-数据库查询方法

药品通用名-药品化学名-药品商品名的区别 药品通用名通常是由药典委员会或相关药品命名机构根据药品的化学成分或治疗特性制定的标准化名称。这个名称在科学和医疗领域中用于确保对药品的准确和一致性识别。如阿司匹林&#xff08;Aspirin&#xff09;是药品的通用名。&#x…

Tomact安装配置及使用(超详细)

文章目录 web相关知识概述web简介(了解)软件架构模式(掌握)BS&#xff1a;browser server 浏览器服务器CS&#xff1a;client server 客户端服务器 B/S和C/S通信模式特点(重要)web资源(理解)资源分类 URL请求路径(理解)作用介绍格式浏览器通过url访问服务器的过程 服务器(掌握)…

Vue.js课后练习(登录注册和大小比较)

第一题 请编写登录页面和注册页面&#xff0c;通过动态组件实现动态切换页面中显示的组件&#xff0c;效果如图1和图2所示。 图1 登录页面 图2 注册页面 代码&#xff1a; my.vue代码: <template>登录 </template><script setup> </script><st…

maven聚合,继承等方式

需要install安装到本地仓库&#xff0c;或者私服&#xff0c;方可使用自己封装项目 编译&#xff0c;测试&#xff0c;打包&#xff0c;安装&#xff0c;发布 parent: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…