2018年7月11日 星期三

MDI 架構,子表單存取父層表單元件



一般子表單存取父表單的元件資料,通常會這樣寫。

Form1 (父),內含一個 TextBox1
Form2 (子),想存取 TextBox1

Form1 這樣寫:

Form2 frm = new Form2(this); //設定Owner 
frm.ShowDialog();


Form2 這樣寫:
TextBox txt = ((Form2)Owner).TextBox1; //取得Owner內元件


但如果今天放到MDI架構下會不太一樣,假設今天....


FormMain 設定為 MdiContainer,從裡面啟動 Form1
Form1 (父),內含一個 TextBox1
Form2 (子),想存取 TextBox1

 這時如果同上述寫法,Form2 的 Owner (居然)會抓到 FormMain !?
 Form2 必須改為這樣寫:
TextBox txt = ((Form2)Owner.ActiveMdiChild).TextBox1;