永远的不倒翁

No pains,No gains!

导航

窗体实例唯一

Posted on 2007-03-21 17:36  永远的不倒翁  阅读(412)  评论(0编辑  收藏  举报

参考了网上一些资料.如下:

private static 窗体 instance = null;
//添加一个属性
public static 窗体 Instance
{
     
set{
     }
     
get{
         
if(instance == null){
             
new 窗体();
         }
         
return instance;
     }
}

在窗体的构造函数中加入如下代码

instance = this;

创建窗体Closed事件

private void 窗体_FormClosed(object sender, FormClosedEventArgs e)
{
    instance 
= null;
}

使用方法:
在要调用该窗体的地方加入如下代码

窗体 myfrm = 窗体.Instance; 
myfrm.Show();
myfrm.Activate();

自己的,如下:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using System.ComponentModel;

namespace WinForm
{
 /// <summary>
 /// FormManager 的摘要说明。
 /// </summary>
 public class FormManager
 {
  private static Form3 form3=null;
  private static Form2 form2=null;
  private FormManager()
  {
   
  }

  public static Form2 Form2Ins
  {
   get{
    if(form2==null)
    {
     form2=new Form2();
    }
    return form2;
   }
  }

  public static Form3 Form3Ins
  {
   get
   {
    if(form3==null)
    {
     form3=new Form3();
    }
    return form3;
   }
  }
 }
}
窗体的Closed事件里面加上FormManager.Form2Ins=null;

 使用法:
FormManager.Form2Ins.Show()

又一方法,大致同上,只是将关闭的处理交到一个类来处理了.这样,就只需要修改FormManager这个就可以了
private static Form2 form2=null;
  public static Form2 Form2Ins
  {
   get{
    if(form2==null)
    {
     form2=new Form2();
     form2.Closed+=new EventHandler(FormManager.ClosedWindow2);
    }
    return form2;
   }
   set
   {
    form2=value;
   }
  }
  private static void ClosedWindow2(object sender, System.EventArgs e)
  {
   form2=null;
  }
本想把关闭全部写在一个方法里面,看来还要看看委派这里了..请大家多多指点

欢迎大家踊跃拍砖!!!