C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤

image

前言

嗨,各位码农们!今天我们要来聊聊如何在 C# 的 WinForms 应用程序中用 MDI(Multiple Document Interface)模式来优雅地管理多个子窗体。

如果你曾经对着一堆乱七八糟的窗体不知所措,或者想要让你的应用程序看起来更专业一点,那么这篇文章就是为你准备的!

想象一下,当你打开一个应用,所有的子窗体都乖乖地呆在一个主窗口里面,是不是感觉棒极了?好了,废话不多说,让我们开始吧!

Step By Step 步骤

  1. 创建一个 WinForm 类型的项目

  2. 添加三个 Windows 窗体

    • FrmMain.cs(主窗体)
    • FrmTest1.cs(这俩是小弟,也就是子窗体)
    • FrmTest2.cs
  3. 打开 FrmMain 窗体设计器,修改以下属性

    • Text: MDI 主窗体
    • Size: 1000,600
    • StartPosition: CenterScreen
    • IsMdiContainer: True(重要,将窗体设置为 MDI 容器
    • 其它属性默认值即可
  4. 拖拽一个 MenuStrip 控件到 FrmMain 窗体设计器里,并将 MenuStrip 控件改名为 MenuFuns

  5. 在 FrmMain 窗体设计器里输入两个菜单项:

    • 打开窗体1,同时将菜单项改名为 menuOpenWin1
    • 打开窗体2,同时将菜单项改名为 menuOpenWin2
  6. 分别双击这两个菜单项,自动生成菜单项的单击事件,如:

    private void menuOpenWin1_Click(object sender, EventArgs e)
    {
    	
    }
    
    private void menuOpenWin2_Click(object sender, EventArgs e)
    {
    	
    }
    
  7. 在这两个事件里写上打开相应子窗体的代码,最终代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace MRHelper
    {
    	public partial class FrmMain : Form
    	{
    		public FrmMain()
    		{
    			InitializeComponent();
    		}
    
    		private void menuOpenWin1_Click(object sender, EventArgs e)
    		{
    			var frm = new FrmTest1();  	// 实例化子窗体
    			frm.MdiParent = this; 		// 让子窗体知道它的老大是谁
    			frm.MinimizeBox = false;	// 不要最小化按钮	
    			frm.MaximizeBox = false;	// 也不要最大化按钮
    			frm.StartPosition = FormStartPosition.CenterScreen;	// 居中显示
    			frm.Show(); 				// 显示子窗体
    		}
    
    		private void menuOpenWin2_Click(object sender, EventArgs e)
    		{
    			var frm = new FrmTest2();
    			frm.MdiParent = this;
    			frm.MinimizeBox = false;
    			frm.MaximizeBox = false;
    			frm.StartPosition = FormStartPosition.CenterScreen;
    			frm.Show();
    		}
    	}
    }
    
  8. 打开 Program.cs 文件,设置启动窗体为 FrmMain 窗体,如:

    Application.Run(new FrmMain());
    
  9. 至此,一切准备就绪,按 F5 或点击运行按钮,然后点击菜单,就可以看到子窗体一个个乖乖地出现了!

总结

WinForm MDI 模式就像是窗体管理大师,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用,减少了视野中的混乱,在这个统一的界面里,用户就能轻松上手,享受程序带来的便利,各位小窗体还有机会共享主窗体的资源,真是个团宠。

当然,多个子窗体的管理也会带来一些小挑战,像是每个子窗体的生命周期管理,还有子窗体之间需要传递的参数、事件,若管理失当,可能导致代码变得像战场一样乱七八糟,甚至引发内存泄漏的悲剧。

不过,别担心,MDI 模式在适合多文档处理的场景中绝对是一种强大的设计模式。在设计与实现时,只需综合考虑业务流程逻辑,就能避免那些小小的 “安全隐患” 了。

你觉得 WinForm MDI 模式的风格和性能怎么样?欢迎留言分享你的想法!

往期精彩

  1. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  2. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得。欢迎关注老杨的公众号,相互交流,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值