傳統上,可以為Windows編寫3種應用程序,它們是:

1)基於對話框的應用程序,它們給用戶顯示一個對話框,該 對話框提供了所有的功能。如計算器

2)單一文檔界面(SDI),這些應用程序給用戶顯示一個菜單、一個或多個工具欄和一個窗口,在該窗口中,用戶可以執行任務。如WordPad

3)多文檔界面(MDI),這些應用程序的執行方式與SDI相同,但可以同時打開多個窗口。

MDI應用程序至少要由兩個截然不同的窗口組成。第一個窗口叫作MDI容器(Container),第二個為 可以在容器中顯示的窗口叫作MDI子窗口。創建MDI時,只需把窗體的IsMdiContainer屬性設為True即可。

創建子窗體時,要把這個窗體的MdiParent屬性設置為主窗口的一個引用,該窗體就變成子窗體了。不能通過Properties面板設置這個屬性,只能通過代碼來設置。

建立MDI的方法

1、建立兩個窗體。將其中的一個作為主窗體的IsMdiContainer屬性設為True。

2、將作為子窗體的窗體構造函數中傳入主窗體。並將MdiParent設為傳為的主窗體,

3、在主窗體中呼叫子窗體。

示例:

注:下面代碼中的序號與上面建立方法的序號對應

1、建立兩個窗體:frmContainer窗體,作為主窗體;frmChild窗體,為作子窗體。

frmContainer代碼:

namespace MdiBasic

{

public partial class frmContainer : Form

{

public frmContainer()

{

InitializeComponent();

//1、將窗體設為主窗體容器

IsMdiContainer = true;

//3、顯示子窗體

MdiBasic.frmChild child = new frmChild(this);

child.Show();

}

}

}

frmChild代碼:

namespace MdiBasic

{

public partial class frmChild : Form

{

//2、傳入主窗體

public frmChild(MdiBasic.frmContainer parent)

{

InitializeComponent();

//2、將子窗體注冊到容器中

this.MdiParent = parent;

}

}

}

防止子FORM重復打開的函數
public void showMDIChildForm( Form Aform,Form Pform)
{
Type t = Type.GetType(“GenesisHR."+Aform.Name);
for (int i=0;i {
if(MdiChildren[i].GetType() == t)
{
MdiChildren[i].Select();
return;
}
}

//Add a button to toobar
// toolBar_task.Buttons.Add(Aform.Text);
Aform.MdiParent=Pform;
Aform.Show();
}

//防止子FORM重復打開

foreach (Form froms in this.MdiChildren )
{//获取MID里的所有子窗体
if (froms is Form2)
{//判断是否有Form2
froms.Focus();//获得焦点
return;//退出过程
}
}//没有Form2就Show 一个出来
Form2 f = new Form2();
f.MdiParent = this;
f.Show();