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

ops/2024/10/18 16:41:22/

        随着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.ppmy.cn/ops/28137.html

相关文章

网络安全之弱口令与命令爆破(中篇)(技术进阶)

目录 一&#xff0c;什么是弱口令&#xff1f; 二&#xff0c;为什么会产生弱口令呢&#xff1f; 三&#xff0c;字典的生成 四&#xff0c;使用Burpsuite工具验证码爆破 总结 笔记改错 一&#xff0c;什么是弱口令&#xff1f; 弱口令就是容易被人们所能猜到的密码呗&a…

【数据结构(十)】Map和Set

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.搜索树2.1 概念2.2实现二叉搜索树 2.4性能分析3.搜索3.Map3.1Map说明3.2 M…

OBSERVER(观察者)-- 对象行为模式

意图&#xff1a; 定义对象间地一种一对多地依赖关系&#xff0c;当一个对象地状态发生改变时&#xff0c;所有对于依赖于它的对象都得到通知并被自动更新。 别名&#xff1a; 依赖(Dependents), 发布-订阅(Publish-Subsribe) 动机&#xff1a; 将一个系统分割成一系列相互协…

【JavaEE】线程的概念

文章目录 1、什么是线程2、进程和线程的区别3、多线程的概述4、在Java中实现多线程的方法1.继承Thread类2.实现Runnable接口3.使用匿名内部类来继承Thread类&#xff0c;实现run方法4.使用匿名内部类来实现Runnable接口&#xff0c;实现run方法5.使用 lambda表达式 1、什么是线…

【大数据】利用 Apache Ranger 管理 Amazon EMR 中的数据权限

利用 Apache Ranger 管理 Amazon EMR 中的数据权限 1.需求背景简介2.系统方案架构图3.主要服务和组件简介3.1 Amazon EMR3.2 Simple Active Directory3.3 Apache Ranger 4.部署步骤4.1 部署 Simple AD 服务4.2 部署 Apache Ranger4.3 部署 Amazon EMR4.4 在 Amazon EMR 的主节点…

fedora 40默认grub配置文件路径

如果需要添加自定义的菜单项或者其他高级配置&#xff0c;可以编辑&#xff1a; /etc/default/grub 文件&#xff0c;然后以下命令来更新grub.cfg: grub2-mkconfig -o /boot/grub2/grub.cfg /etc/default/grub常见选项的解释&#xff1a; GRUB_TIMEOUT&#xff1a; 默认值&…

Cocos Creator 3D物理引擎的物理参数控制详解

前言 Cocos Creator是一款基于JavaScript和TypeScript的开源游戏引擎&#xff0c;它提供了强大的3D物理引擎&#xff0c;可以帮助开发者实现各种物理效果。在Cocos Creator中&#xff0c;我们可以通过控制物理参数来实现不同的物理效果&#xff0c;比如重力、碰撞检测、摩擦力…

fdfs安装启动及性能优化

fsatDFS安装 1、使用 wget 命令下载压缩包&#xff0c;如果没有 wget 命令使用 yum 命令安装 yum install wget 2、下载 fastdfs wget -c “https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz” 3、下载 libfastcommon wget -c “https://github.com/happyfish10…