C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
|
admin
2024年12月12日 8:43
本文热度 106
|
前言
嗨,各位码农们!今天我们要来聊聊如何在 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 编辑过