今天翻了一些旧资料突然找到个文件名为窗口最大化的文档,打开看了一下发现里面竟然只有代码而没有主要说明,十分郁闷,便将这断代码来测验一下。发现原来是我以前写代码时犯得错误,希望对刚接触编程的朋友有些帮助。
在使用MDI模式的时候打开一个窗口时,我们都会新建一个窗口
代码如下:
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.Show();
但是大家有没有想过,当我们重复的打开同一个窗体时会发生一些我们不想要的事,就是同一个窗体打开了N多个,造成了资源的浪费,嘿嘿,当然这就是我以前刚开始编程时所犯得错误了。
现提供以下一种解决方案,主要思路就是当打开一个窗体时检测主窗体中的MDIChildren是否包含同类型的窗口,有的话就将那个窗体显示出来,否则再新建一个窗体。
代码如下:
public System.Windows.Forms.Form GetOneFormInstance(Type typicalForm)
{
///one instance only
bool hasOneInstance = false;
System.Windows.Forms.Form instanceForm = null;
//检测目标窗体是否已打开,若已打开则将其最大化显示
foreach (Form form in this.MdiChildren)
{
if (form.GetType() == typicalForm)
{
instanceForm = form;
instanceForm.Activate();
hasOneInstance = true;
}
}
//如果目标窗体目前没有打开则新建一个目标窗体
if (!hasOneInstance)
{
instanceForm = (System.Windows.Forms.Form)Activator.CreateInstance(typicalForm);
instanceForm.MdiParent = this;
instanceForm.Show();
instanceForm.WindowState = FormWindowState.Maximized;
}
return instanceForm;
}
方法很简单,如果这是做在一个小程序里的话其实这两种方法体现出来的差别不大,但是我想说明的是一个细节问题,这些细节可以帮我们提高不错的效率,作为一个后台代码编写者,我们能让顾客感觉到的就是我们这个程序运行速度额快慢,所以效率问题也就显了重要了,考虑细节也就成了我们提高程序效率的一种途径。