將子表單 TopLevel = false,指定 Parent 為容器控件,再呼叫 Show()。
private void btnOpenChild_Click(object sender, EventArgs e)
{
Form child = new Form();
child.TopLevel = false; // 關鍵:非頂層視窗
child.FormBorderStyle = FormBorderStyle.None; // 無邊框
child.Dock = DockStyle.Fill; // 填滿容器
child.Parent = this.panel1; // 指定父容器
child.Show();
}
| 模式 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| MDI (IsMdiContainer) | 傳統桌面多文檔 | 內建視窗管理 | 樣式固化、跨平台差 |
| Panel 嵌入 (TopLevel=false) | 現代單頁應用風格 | 彈性高、支援動畫/轉場 | 需自行管理生命週期 |
TopLevel=false 在 Show() 前設定。child.Dispose() 並移除事件訂閱。Load 時呼叫 this.ActiveControl = null; 或設定 TabStop。