前言
嗨,各位碼農們!今天我們要來聊聊如何在 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 編輯過