一、打开MDI子窗体,且允许重复打开。
FrmMytest frmMytest = new FrmMytest();
frmMytest.MdiParent = this;
frmMytest.Show();
二、打开MDI子窗体,但不允许重复打开;即如果窗体未打开过,则直接打开,如果打开过,原来的窗体直接显示在最上面。
int index = HaveOpened(this, "FrmMytest");
if (index == -1)
{
FrmMytest frmMytest = new FrmMytest();
frmMytest.MdiParent = this;
frmMytest.Show();
}
else
{
this.MdiChildren[index].Show();
}
其中,HaveOpened方法如下:
/// <summary>
/// 功能名称:查看MDI子窗体是否已经被打开
/// 输入参数:MdiFather,Form,需要判断的父窗体对象
/// MdiChild,string,需要判断的子窗体控件名
/// 返回结果:-1为没有被打开,正数为子窗体集的数组下标
/// </summary>
public static int HaveOpened(Form frmMdiFather, string strMdiChild)
{
int bReturn = -1;
for (int i = 0; i < frmMdiFather.MdiChildren.Length; i++)
{
if (frmMdiFather.MdiChildren[i].Name == strMdiChild)
{
frmMdiFather.MdiChildren[i].BringToFront();
bReturn = i;
break;
}
}
return bReturn;
}
三、Show的方法
1、非模式窗体的打开方法
new FrmMytest().Show();
2、模式窗体的打开方法
FrmMytest frmMytest = new FrmMytest();
frmMytest.ShowDialog();
四、说明
1、打开的子窗体不会在windows任务栏中显示,避免用户感觉一个系统有多个运行的问题。
2、主窗体设置属性IsMdiContainer = true,MDI子窗体IsMdiContainer = false,否则系统编译时会报错。
3、Show的方法,打开的子窗体不会在Windows任务栏中显示的问题,需要在子窗体的属性中,将Form.ShowInTaskbar设置为false;但如果程序中加入了断点,想从程序中返回子窗体时有问题,在windows任务栏中找不到这项,即无法让新窗体再次显示。