• WinForm 窗体间参数传递


    http://www.cnblogs.com/xinjian/archive/2011/09/15/2177851.html

    本人刚刚接触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下载

  • 相关阅读:
    IntelliJ idea 2021.3 安装使用及激活
    高项-信息系统基础-UML图
    软考高项(信息系统项目管理师)介绍
    Android Studio中的Gradle面板没有Task任务列表如何找回?
    ubuntu 安装nodejs,npm,
    解决video.js video-player不能自动播放问题
    vuex开启namespaced
    axios提交body raw格式
    vue配置服务代理
    PIDFile没有配置导致将mongodb配置成服务时启动失败
  • 原文地址:https://www.cnblogs.com/xihong2014/p/4148754.html
Copyright © 2020-2023  润新知