MDI窗体的创建
首先在c#里添加一个窗体,命名为mdimain,将其ismdicontainer设定成true,这样mdi主窗体就建立了。然后再添加新窗体,命名为mdichild。现在运行程序,会发现只运行了mdimain这个主窗体。呵呵因为我们没有写任何代码,第二个窗体当然不能出现了。现在来添加这个代码。
在mdimain窗体上添加一个menu,然后随便写个子菜单。双击子菜单,会出现它的click事件,在这个事件内写如下代码:
mdichild frmmdichild=new mdichild();
frmmdichild.mdiparent=this;
frmmdichild.show();
这样在单击菜单项的时候就能显示mdichild这个窗体了。但是这样会出现一个问题,就是说如果我按两次那个菜单项就会出现两个mdichild窗体,呵呵,这是因为在c#中窗体就是一个class,用刚才的代码就新建了一个mdichild的实例。所以你按几次菜单项就会出现几个窗体了。控制的方法之一就是写一个变量,来存放是否打开了这个窗体,如果打开了就不继续执行了。这个小代码还是很简单的。
如果想通过程序关闭mdichild窗体,只需在mdichild里添加一个button,在button的click事件里写上close();就可以了。
MDI窗体程序中防止子窗体被多次实例化的方法:
private static ChildForm childForm; //静态变量,保存唯一实例
private void menuItem_Click(object sender, System.EventArgs e)
{
ChildForm childForm = GetChildForm(); //获取子窗体对象
childForm.Show(); //显示之
}
private ChildForm GetChildForm()
{
//先后次序不能错,前一个条件用来判断是否是第一次,后一个条件用来判断子窗体是否被关闭了
if( childForm == null || childForm.IsDisposed )
{ //第一次实例化也好,被关了也好,都重新实例化
childForm = new ChildForm();
childForm.MdiParent = this;
}
return childForm;
}

浙公网安备 33010602011771号