zoukankan      html  css  js  c++  java
  • 单例模式弹出窗体实现

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

    实现方法如下:

     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种实现

  • 相关阅读:
    BeautifulSoup中的select方法
    BeautifulSoup中的find,find_all
    python中sys.stdout、sys.stdin
    python sort、sorted
    Numpy常用操作
    pandas (loc、iloc、ix)的区别
    小波变化库——Pywalvets学习笔记
    python filter()函数
    Redis数据库总结
    高逼格企业级MySQL数据库备份方案,原来是这样....
  • 原文地址:https://www.cnblogs.com/haorui/p/3583337.html
Copyright © 2011-2022 走看看