C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
				
									
					
					
						|  | 
							admin 2024年12月12日 8:43
								本文热度 1702 | 
					
				 
				
前言
嗨,各位码农们!今天我们要来聊聊如何在 C# 的 WinForms 应用程序中用 MDI(Multiple Document Interface)模式来优雅地管理多个子窗体。
如果你曾经对着一堆乱七八糟的窗体不知所措,或者想要让你的应用程序看起来更专业一点,那么这篇文章就是为你准备的!
想象一下,当你打开一个应用,所有的子窗体都乖乖地呆在一个主窗口里面,是不是感觉棒极了?好了,废话不多说,让我们开始吧!
Step By Step 步骤
- FrmTest1.cs(这俩是小弟,也就是子窗体)
- StartPosition: CenterScreen
- IsMdiContainer: True(重要,将窗体设置为 MDI 容器)
- 拖拽一个 MenuStrip 控件到 FrmMain 窗体设计器里,并将 MenuStrip 控件改名为 MenuFuns 
- 打开窗体1,同时将菜单项改名为 menuOpenWin1
- 打开窗体2,同时将菜单项改名为 menuOpenWin2
- 分别双击这两个菜单项,自动生成菜单项的单击事件,如: - private void menuOpenWin1_Click(object sender, EventArgs e)
 {
 
 }
 
 private void menuOpenWin2_Click(object sender, EventArgs e)
 {
 
 }
 
 
- 在这两个事件里写上打开相应子窗体的代码,最终代码如下: - 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();
 }
 }
 }
 
 
- 打开 Program.cs 文件,设置启动窗体为 FrmMain 窗体,如: - Application.Run(new FrmMain());
 
 
- 至此,一切准备就绪,按 F5 或点击运行按钮,然后点击菜单,就可以看到子窗体一个个乖乖地出现了! 
总结
WinForm MDI 模式就像是窗体管理大师,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用,减少了视野中的混乱,在这个统一的界面里,用户就能轻松上手,享受程序带来的便利,各位小窗体还有机会共享主窗体的资源,真是个团宠。
当然,多个子窗体的管理也会带来一些小挑战,像是每个子窗体的生命周期管理,还有子窗体之间需要传递的参数、事件,若管理失当,可能导致代码变得像战场一样乱七八糟,甚至引发内存泄漏的悲剧。
不过,别担心,MDI 模式在适合多文档处理的场景中绝对是一种强大的设计模式。在设计与实现时,只需综合考虑业务流程逻辑,就能避免那些小小的 "安全隐患" 了。
该文章在 2024/12/13 9:31:10 编辑过