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();

 

你可能感兴趣的:(WinForm)