1.主要用到的控件TreeView,Splitter,把父窗口IsMdiContainer设为True。子窗体StartPosition=Manual,效果如图
用Splitter把父窗口分两个部分,左边放treeview,右边显示子窗体。
打开子窗口代码
代码
Form childForm = new Form();
childForm.MdiParent = this;
childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childForm.MdiParent = this;
childForm.Text = "Window " + childFormNumber++;
childForm.Show();
代码
private void menu3_Click(object sender, EventArgs e)
{
//如果当前有子窗口打开,关闭当前的窗口
if (this.MdiChildren.Length > 0)
{
this.ActiveMdiChild.Close();
}
DataBillSystem.ReWork.FrmReWork frmReWork = new DataBillSystem.ReWork.FrmReWork();
frmReWork.MdiParent = this;
frmReWork.Show();
}
{
//如果当前有子窗口打开,关闭当前的窗口
if (this.MdiChildren.Length > 0)
{
this.ActiveMdiChild.Close();
}
DataBillSystem.ReWork.FrmReWork frmReWork = new DataBillSystem.ReWork.FrmReWork();
frmReWork.MdiParent = this;
frmReWork.Show();
}
检查当前打开的窗口
代码
有时候我们需要在子窗体显示的时候就是最大化(也就是填充了整个父窗体),但通常会遇到以下麻烦: 如果在 Visual Studio 2010里通过属性工具栏设定了子窗体的 WindowState 为 Maximized,然后在运行过程中会发现子窗体实例化时不会最大化,而是当改变了父窗体的大小之后才随即最大化。而通过在子窗体的构造器里添加代码的方式也无济于事。
解决办法:
取消设置 WindowState 的值(改回默认的 Normal ),然后在实例化子窗体之后用代码设置它的WindowState即可,代码:
C#
frmMDIChild child = new frmMDIChild();
child.MdiParent = this;
child.WindowState = FormWindowState.Maximized;
child.Show();