C# Winform傳遞參數
1.構造函數傳參。即重載第二個窗體的構造函數,把需要傳的參數寫入第二個窗體的構造函數。
Form1
private void button1_Click(object sender, EventArgs e)
{
string txt = this.textBox1.Text;
Form2 frm = new Form2(txt);//帶入構造函數
frm.Show();
}
Form2
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
public static string TxtVal = "";//公共的靜態變量。可以不示例就訪問。
private void button2_Click(object sender, EventArgs e)
{
TxtVal = this.textBox1.Text;
Form3 frm = new Form3();
frm.Show();
}
Form3
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
ShowPara();
}
public void ShowPara()
{
this.label1.Text = Form1.TxtVal;
}
}
3.通過事件來傳參數,這種方式的好處是可以使解耦兩個form之間的關聯。
先定義一箇中間模塊(Observer類庫),用來處理兩個FORM中關係。
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);
}
}
}
}
Form1
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);//發送參數值
}
}
Form2
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();
}
}
}
參考文章:
https://www.cnblogs.com/xinjian/archive/2011/09/15/2177851.html