zoukankan      html  css  js  c++  java
  • WinForm 参数传递

      本人刚刚接触Winform ,学习之后分享下心得。

     winform 窗体与窗体之间参数的传递常规的有两种

       1.构造函数传参。即重载第二个窗体的构造函数,把需要传的参数写入第二个窗体的构造函数。代码如下:

      Form1:

            private void button1_Click(object sender, EventArgs e)
    {
    string txt = this.textBox1.Text;
    Form2 frm
    = new Form2(txt);//带入构造函数
    frm.Show();
    }

      Form2:

      

    View Code
        public partial class Form2 : Form
    {
    private string TxtVal = null;//上一窗体带过来的值
    public Form2(string txt) //重载构造函数
    {
    this.TxtVal = txt;//获取传过来的值
    InitializeComponent();

    //显示,用于测试
    ShowPara();
    }

    public Form2()
    {
    InitializeComponent();
    }

    public void ShowPara()
    {
    this.label1.Text = this.TxtVal;
    }


    }

      

    2. 全局变量传参数。即 第二个窗体通过获取第一个窗体的全局变量的值。来达到传参的目的。代码如下:

    Form1:

    View Code
     public static string TxtVal = "";//公共的静态变量。可以不示例就访问。
    private void button2_Click(object sender, EventArgs e)
    {
    TxtVal
    = this.textBox1.Text;
    Form3 frm
    = new Form3();
    frm.Show();
    }

    Form3:

    View Code
     public partial class Form3 : Form
    {
    public Form3()
    {
    InitializeComponent();
    ShowPara();
    }

    public void ShowPara()
    {
    this.label1.Text = Form1.TxtVal;
    }
    }

      

    另外。还可以通过事件来传参数。 这种方式的好处是可以使解耦两个form之间的关联。

    1.先定义一个中间模块(Observer类库),用来处理两个FORM中关系。

    View Code
    namespace Observer
    {
    /// <summary>
    /// 定义一个信息委托
    /// </summary>
    /// <param name="sender">发布者</param>
    /// <param name="msg">发送内容</param>
    public delegate void MsgDlg(object sender,object msg);

    public class MidModule
    {
    /// <summary>
    /// 消息发送事件
    /// </summary>
    public static event MsgDlg EventSend;


    public static void SendMessage(object sender, object msg)
    {
    if (EventSend != null)//
    {
    EventSend(sender, msg);
    }
    }
    }

    2.Form1代码

    View Code
        public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    string txt=this.textBox1.Text;
    Form2 frm
    = new Form2();
    frm.Show();

    MidModule.SendMessage(
    this, txt);//发送参数值
    }
    }

    3. Form2代码

    View Code
        public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();

    //订阅了信息发送事件,即接受参数值
    MidModule.EventSend+=new MsgDlg(MidModule_EventSend);
    }

    //接受参数后具体干啥的实现
    private void MidModule_EventSend(object sender, object msg)
    {
    if (sender != null)
    {
    this.label1.Text = msg.ToString();
    }
    }


    }

      

    这样就很神奇的完成了传参的步骤。

    参考:http://topic.csdn.net/u/20100112/12/34f6d852-fd02-474f-bfc4-621c6baa35a8.html

    Demo下载

     

  • 相关阅读:
    金融风控100道面试题:传统银行开发转行互金top3公司并年薪40多万
    想学好矩阵?首先你要知道矩阵的历史!​
    什么是卷积?
    CNN的卷积核是单层的还是多层的?
    AI换脸之后“AI换声”来了!,一小时诈骗173万!
    介绍两个面试神器
    Github最火!程序员必须知道22大定律和法则
    SQL常用运算符
    SQL利用通配符进行模式查询
    隐藏DataList里面的某一行数据
  • 原文地址:https://www.cnblogs.com/xinjian/p/2177851.html
Copyright © 2011-2022 走看看