Winform中MDI窗體設計
MDI窗體即多文件介面。用於同時顯示多個文件,每個文件顯示在各自的視窗中。
1、設定MDI窗體
在MDI窗體中,起到容器作用的視窗被稱為“父窗體”,放到父窗體中的其他窗體被稱為“子窗體”,也成為“MDI子窗體”。當MDI應用程式啟動時,首先會顯示父窗體。每個應用程式只能有一個父窗體,其他子窗體不能移除父窗體的框架區域。
父視窗設定:
設定子窗體:
通過設定某個窗體的MdiParent屬性來確定子窗體。
//引數設定選單欄 private void 引數設定ToolStripMenuItem_Click(object sender, EventArgs e) { SetPara SetParaWin = new SetPara();//建立引數設定視窗物件 SetParaWin.MdiParent = this;//設定當前窗體為父窗體 SetParaWin.Show();//顯示窗體 }
這樣設定之後發現子視窗不顯示了,但其實是被父視窗的控制元件擋住了,解決方法如下,父窗口裡加入以下語句。
using System.Runtime.InteropServices; public partial class Form1 : Form { [DllImport("user32")] public static extern int SetParent(int children, int parent);//彈出子視窗 //引數設定選單欄 private void 引數設定ToolStripMenuItem_Click(object sender, EventArgs e) { SetPara SetParaWin = new SetPara();//建立引數設定視窗物件 SetParaWin.MdiParent = this;//設定當前窗體為父窗體 SetParaWin.Show();//顯示窗體 SetParent((int)SetParaWin.Handle, (int)this.Handle); } }
測試成功。
參考:https://blog.csdn.net/SugaryoTT/article/details/51345926#systemruntimeinteropservices
user32.dll是Windows使用者介面相關應用程式介面,用於包括Windows處理,基本使用者介面等特性,如建立視窗和傳送訊息。
System.Runtime.InteropServices提供在窗體執行時的各種服務。
注意:使用System.Runtime.InteropServices和user32.dll不需要再額外新增引用,直接用語句應用即可。
2、排列MDI子窗體
當有多個子窗體同時開啟,需要對其排列順序進行調整。可以通過帶有MdiLayout列舉的LayoutMdi方法排列多文件介面父窗體中的子窗體。
語法:public void LayoutMdi (LayoutMdi value)
子窗體排列
LayoutMdi(MdiLayout.TileHorizontal);//使用MdiLayout列舉實現窗體的垂直平鋪
LayoutMdi(MdiLayout.TileVertical);//使用MdiLayout列舉實現窗體的垂直平鋪
LayoutMdi(MdiLayout.Cascade);//使用MdiLayout列舉實現窗體的層疊平鋪
3、窗體使用Show方法和ShowDialog方法顯示窗體的區別
(1)使用Show方法:非模式窗體,如果有多個窗體,使用者單擊任何一個窗體,立即成為啟用窗體並顯示在螢幕的最前端。
(2)ShowDialog方法:模式窗體,它在顯示時,如果作為啟用窗體,則其他窗體不可用,只有在將模式窗體關閉之後,其他窗體才能恢復可用狀態。