单例模式弹出窗体实现

有时需要多次弹出一个窗体,但是窗体较为复杂弹出缓慢,下方的单例模式实现则较好的解决了这个问题,好处是窗体是静态的,仅构造一次,第二次弹出的时候相对比较快

实现方法如下:

 1 using System;
 2 using System.Windows.Forms;
 3 
 4 namespace SingleFormDemo
 5 {
 6     public partial class PopForm : Form
 7     {
 8         private PopForm()
 9         {
10             InitializeComponent();
11         }
12 
13         private static PopForm _instance;
14 
15         //窗体静态单例方法
16         public static PopForm Singleton()
17         {
18             return _instance ?? (_instance = new PopForm());
19         }
20 
21         private void button1_Click(object sender, EventArgs e)
22         {
23             this.Close();
24 
25         }
26         //窗体正在关闭
27         private void PopForm_FormClosing(object sender, FormClosingEventArgs e)
28         {
29             _instance = null;
30         }
31 
32     }
33 }

主窗体调用代码

1         private void button1_Click(object sender, EventArgs e)
2         {
3             PopForm.Singleton();
4             PopForm.Singleton().ShowDialog();
5         }

  实现完了总是感觉怪怪的,调用的时候是一个方法返回的,我们可以让他看起来像一个静态类一样,嗯,看起来像,我们又想更新它部分的属性(下方更新Label的Text),那么代码如下:

using System;
using System.Windows.Forms;

namespace SingleFormDemo
{
    public sealed partial class PopForm : Form
    {
        private PopForm()
        {
            InitializeComponent();
        }

        private static PopForm _instance;
        public static PopForm Instance
        {
            get { return _instance ?? (_instance = new PopForm()); }
        }

        public string LabelText
        {
            set
            {
                Instance.label1.Text = value;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        //窗体正在关闭
        private void PopForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            _instance = null;
        }
    }
}

调用如下;

        private void button1_Click(object sender, EventArgs e)
        {
            PopForm.Instance.LabelText = DateTime.Now.ToString();
            PopForm.Instance.ShowDialog();
        }

OK,这下看起来好多了

如果需要更进阶的了解单例模式,请看单例模式(Singleton)的6种实现

原文地址:https://www.cnblogs.com/haorui/p/3583337.html