前言
本篇博客小编来总结总结一下MDI窗体和单例模式,别看一个是窗体一个是设计模式,里面可有不少好玩的东西值得探究呢!
MDI窗体
Where
这个要说到SDI窗体(单文档窗体),它只能打开一个文档。而我们通常的操作中,往往要打开多个文档。例如,我们的机房收费系统,操作员可能要同时查看学生信息表对学生进行注册,这时就要打开两个或者多个窗体,这时,MDI窗体就可以做到了。
What
总结来说,MDI窗体就是允许用户同时打开多个文档界面。
How
MDI的使用非常的简单方便,只需要将窗体的IsMdiContainer属性设置为true即可
单例模式
Where
这个时候我们可以联想计算机中的任务管理器,无论你点击多少次,它只弹出来一次。为什么会这样呢?一,弹出多次会造成资源浪费。二、不同时刻弹出来的任务管理器也不一样,例如里面显示的CPU占用率、内存使用率,这让用户怎么看嘛!所以,无论我们点击多少次,它都只弹出来一次,这就引来了单例模式。
What
确保一个东西只能有一个,如果在编程的角度来看,就是确保一个类只能实例化一个实例,并且自行实例化并向整个系统提供这个实例。
这个我们还可以想到我们的机房收费系统,例如我想点击充值按钮打开充值界面,使用单例模式无论如何只实例化一个充值窗体,这在一定程度上减少资源浪费。
How
一张图足以说明单例模式。单例模式只有一个Singleton类并且为private属性,提供唯一的一个对类的实例共享。内部提供GetInstance方法,让客户可以访问它的唯一实例。
两者关系
MDI窗体和单例模式可谓是相辅相成的好兄弟关系。一个小demo可以很好的证明他们之间的关系:
//父窗体
public Form1()
{
InitializeComponent();
//将Form1设置为MDI窗体,当然在Form1的IsMdiContainer属性页可以设置
this.IsMdiContainer = true;
}
//点击子窗体按钮,打开子窗体,设置为当前父窗体的子窗体,并且调用窗体中的到单例模式
private void frmChildren_Click(object sender, EventArgs e)
{
FrmChildren child = FrmChildren.GetWindow();//调用方法
child.MdiParent = this;//设置child的父窗体为当前窗体
child.Show();
}
//子窗体,单例模式,声明GetWindow可调用方法
public partial class FrmChildren : Form
{
private FrmChildren() //由 public FrmChildren改为 private FrmChildren
{
InitializeComponent();
}
static FrmChildren fc = null; 创建一个静态对象
public static FrmChildren GetWindow()
{ //当子窗体没有开启或者已经释放。就可以创建新窗体
if (fc==null||fc.IsDisposed)
{
fc = new FrmChildren();
}
return fc;
}
}