在网上找了两个解决办法:最大的不同点是一个用了父窗体的MdiChildren来作为判断依据,而另一个则是用Application.OpenForms,试了一下都可以,哪天再研究下。
第一个,转自:http://www.cnblogs.com/virusswb/
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication4
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
private void 登录ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form form in Application.OpenForms)
{
if (form.Name == "frmLogin")
{
form.Activate();
form.WindowState = FormWindowState.Maximized;
return;
}
}
frmLogin login = new frmLogin();
login.MdiParent = this;
login.WindowState = FormWindowState.Maximized;
login.Show();
}
private void 日志ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form form in Application.OpenForms)
{
if (form.Text == "frmLogInfo")
{
form.Activate();
return;
}
}
frmLogInfo log = new frmLogInfo();
log.MdiParent = this;
log.WindowState = FormWindowState.Maximized;
log.Show();
}
private void frmMain_Load(object sender, EventArgs e)
{
frmLogin login = new frmLogin();
login.WindowState = FormWindowState.Maximized;
login.MdiParent = this;
login.Show();
}
}
}
-------------------------------------分割线--------------------------------------------------------------------------------------------
2.MDI窗体:创建MDI父窗体方法
(1)选中Form1窗体,属性窗口中,设置IsMDIContainer为“True”(即该窗体为子窗体的MDI父窗体)
(2)拖一个MenuStrip“菜单”组件到Form1中,将第一个主菜单设置为“文件”,在下拉菜单中增加“打开Form2子窗体”和“关闭”两项。
3.MDI窗体:创建MDI子窗体方法
(1)在项目解决方案管理器上右击项目添加新建项,添加一个Windows窗体,Form2。
(2)双击“打开Form2子窗体”菜单按钮触发事件:
private void 打开Form2子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{ Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
}
4.MDI窗体:确定活动的MDI子窗体(不允许连续单击弹出Form2子窗体)
双击“打开Form2子窗体”菜单按钮触发事件:
private void 打开Form2子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{ foreach (Form childFrm in this.MdiChildren) //this表示这个窗体(父窗体)
{ if (childFrm.Name == "Form2")
{ if (childFrm.WindowState == FormWindowState.Minimized) //如果该子窗体最小化
{ childFrm.WindowState = FormWindowState.Normal; //把它变为正常大小窗口
childFrm.Activate(); //把该子窗口设为活动窗口
return;
}
else
{ childFrm.Activate(); //其他正常大小或最大化的窗口直接将它设置为活动窗口
return;
}
}
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
}
5.MDI窗体:在父窗体中排列MDI子窗体方法
在"打开Form2子窗体"菜单按钮触发事件代码中的最后加入下面一句话:
this.LayoutMdi(MdiLayout.TileHorizontal); //TileHorizontal表示平铺排列(不设为活动窗口时连续按该菜单后该子窗体平铺排列);此外,MdiLayout的属性还有:TileVertical(垂直平铺)、ArrangeIcons(子图标层叠排列)、Cascade(大窗口层叠排列)