MDI內的子視窗若開啟一個以上,如果其中一個子使窗放大或縮小 (WindowState=Maximized or WindowState=Minimized),其他的子視窗也會一併的被放大或縮小,是否有方式可以讓其他子視窗不要受到影響可以維持原有的狀態實務上子視窗都是使用 Max,剛好有興趣來了解,還真的有這樣的特性,當 MDI 父視窗內的子視窗為 Max 時,把子視窗關閉,下一個Active 子視窗也會被 Max
MDI Form 內找不到屬性可以直接設定來取消這樣的情況,所以是透過 MdiChildActivate Event 搭配 ActiveMdiChild Property 把 WindowsState 設回去
namespace MDIWindowState { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void BtnForm_Click(object sender, EventArgs e) { FormWindowState WindowStateSetting = FormWindowState.Normal; for (int i = 1; i <= 5; i++) { Form f = new Form { MdiParent = this, Text = $"第{i}個 Form", WindowState = WindowStateSetting, // 把 WindowState 初始化設定值存在 Tag 內 Tag = WindowStateSetting }; f.Show(); } } private void Form1_MdiChildActivate(object sender, EventArgs e) { Form f = (Form)this.ActiveMdiChild; if (f == null) { return; } f.WindowState = (FormWindowState)f.Tag; } } }
按下 Button 產生 5 個 Form 來觀察
把 Form5 變成 Max 後,父視窗的 Text 屬性,會有目前 Active 子視窗的 Text 內容
把 Form 5 關閉,Form4 不會是 Max,而是建立時的預設值 Normal
沒有留言:
張貼留言