1. 程式人生 > >Winform中MDI窗體設計

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方法:模式窗體,它在顯示時,如果作為啟用窗體,則其他窗體不可用,只有在將模式窗體關閉之後,其他窗體才能恢復可用狀態。