// Form1 按鈕點擊
private void btnOpenForm2_Click(object sender, EventArgs e) {
Form2 frm2 = new Form2();
frm2.Show(); // 顯示新視窗 (非模態)
this.Hide(); // 隱藏當前視窗,不銷毀,資源保留
}
// Form2 關閉時可選擇重新顯示 Form1
private void Form2_FormClosed(object sender, FormClosedEventArgs e) {
Application.OpenForms["Form1"]?.Show(); // 或傳遞 Form1 參考
}
private void btnSwitch_Click(object sender, EventArgs e) {
// 關閉當前視窗會結束 Application.Run,必須在新執行緒啟動新訊息迴圈
Thread t = new Thread(() => {
Application.Run(new Form2()); // 新執行緒獨立訊息泵
});
t.SetApartmentState(ApartmentState.STA); // WinForms 需 STA
t.Start();
this.Close(); // 關閉舊視窗,原訊息迴圈結束
}
注意:這會建立兩個獨立的 `Application.Run` 迴圈,**非標準單視窗應用架構**,可能導致 `Application.Exit()` 行為異常、資源釋放時機混亂。**強烈建議用場景一 (Hide/Show) 或單一主視窗 + UserControl 切換**。
public partial class MainForm : Form {
private UserControl currentView;
public void SwitchView(UserControl newView) {
if (currentView != null) panelContainer.Controls.Remove(currentView);
currentView = newView;
currentView.Dock = DockStyle.Fill;
panelContainer.Controls.Add(currentView);
}
}