C#點選多次button僅生成一個窗體(單例模式)
阿新 • • 發佈:2018-12-18
優化基本的單例模式
Form1
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm2 = Form2.Form2Single();//呼叫Form2中建立窗體的方法 frm2.Show(); } } }
Form2
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication4 { public partial class Form2 : Form { private Form2() { InitializeComponent(); } private static Form2 form2 = null; public static Form2 Form2Single() { if(form2==null) { form2 = new Form2(); } return form2; } } }
在Form2中如果採用
if(form2==null) { form2 = new Form2(); }
會出現在關閉窗體form2之後,再次點選按鈕出現錯誤,frm2.Show();出現錯誤。關閉之後form2!=null,所以會出現錯誤;採用以下的判斷就不會出現錯誤
if ((f22 == null) || (f22.IsDisposed)) { f22 = new Form2(); }