Winform单例模式与传值

时间:2022-04-29
本文章向大家介绍Winform单例模式与传值,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

单例模式(singleton)的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

在多窗体界面中,如果要加入一个“关于”的窗体,用于显示软件的信息,那么可以用到单例模式,因为“关于窗体”类只需一个实例,下面是实例的代码:

"关于窗体":

1.在vs中建立winform项目,并建立两个窗体form1和form2

Form1单例:

  private static   Form1 _instance = null;
        public Form1()
        {
            InitializeComponent();
          
        }
        public static  Form1 GetInstance()
        {
           if(_instance==null || _instance.IsDisposed)
           {
               _instance = new Form1();
           }
           return _instance;
        }

Form2单例和Form1相同。

2.窗体传值

winform窗体之间的传值可以分为主窗体向子窗体传值,以及子窗体向父窗体传值。

父窗体向子窗体传值:一直采用属性或者构造函数的方法,这里讲述属性的方法。首先需要定义一个属性

1   public string TextValue
2         {
3             get
4             {
5                 return this.label1.Text;
6             }
7             set { this.label1.Text = value; }
8         }

我这里是传递一个label的值。

form2中接收:

        private void button1_Click(object sender, EventArgs e)
        {
            if(AfterText!=null)
            {
                AfterText("10");
                this.label1.Text = Form1.GetInstance().TextValue;
            }
          
        }

值得注意的是采用单例模式后,在form2中调用form1的方法。

子窗体向父窗体传值:一般采用事件或者委托来执行,这里采用委托的方法。

在form2中定义委托:      public Action<string> AfterText {get;set;}

执行委托:   AfterText("10");

from1在打开form2的时候,需要注册委托:

 Form2 form2 = Form2.GetInstance();             form2.AfterText = new Action<string>(this.CalculFinish);             form2.Show();