今天winform开发时,有一个需求:点击一个button,弹出一个窗体,显示相关信息,此时再点击button,就不再创建窗体,这里有两种方式解决:
弹出窗体不关闭,无法操作主窗体使用单例模式
这里使用第二种方法:单例模式(详见百度) 具体代码如下:
public partial class About : Form { public static About instance { get; set; } private About() { InitializeComponent(); } public static About GetInstance() { if (instance == null) { instance = new About(); } return instance; } }调用
About about=About.GetInstance(); about.Show();这样就实现了同时只能打开一个窗体,又能同时操作其他窗体。
But,实际操作之后,会出现这个错误: 这是因为在关闭窗体后,这个对象虽然可能还没被GC回收,但是IsDisposed已经被置为true,已经被视为释放了,这就造成无法访问。 这时可以通过监听Disposed事件来重新分配对象内存。
代码:
public partial class About : Form { public static About instance { get; set; } private About() { InitializeComponent(); } public static About GetInstance() { if (instance == null) { instance = new About(); } instance.Disposed+=new EventHandler(instance_Disposed); return instance; } static void instance_Disposed(object sender,EventArgs e) { instance = null; } }