​

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

  


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View 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:


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View Code


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


Form3:


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View Code


public partial class Form3 : Form     {         public Form3()         {             InitializeComponent();             ShowPara();         }
public void ShowPara()         {             this.label1.Text = Form1.TxtVal;         }     }


  

 

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

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


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View 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代码


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View 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代码


WinForm 窗体间参数传递_全局变量WinForm 窗体间参数传递_传参数_02View 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();             }         }
}


  

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

 ​

 

​Demo下载​