zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    聊一聊HTML <pre>标签
    [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法
    数据库的权限管理
    完整性约束
    MYSQL
    Python并发编程之协程
    python并发编程之多线程
    python并发编程之多进程
    进程
    网络编程之socket的运用
  • 原文地址:https://www.cnblogs.com/ggz19/p/4463434.html
Copyright © 2011-2022 走看看