Winform的窗體之間的數據傳遞是開發的必備技術,下面介紹幾種典型的傳值方法
1、構造函數傳值,但這種方法是單向的(推薦)
上代碼,先傳值
private void button2_Click(object sender, EventArgs e) { Form3 fr3 = new Form3("要傳的值啊"); fr3.ShowDialog(); }
接值,對了,這里需要重載一個Form3的構造函數,然后將拿到的值顯示出來
public Form3(string canshu) { InitializeComponent(); label1.Text = canshu; }
效果圖,就是這么簡單
2、靜態變量傳值(不推薦)
可以將靜態變量申明在你需要的地方,比如一個單獨類,或者Form中,比如我們在這里申明在Form2中
public static string xvalue;
private void button2_Click(object sender, EventArgs e) { xvalue = "要傳的值啊xvalue"; Form3 fr3 = new Form3(); fr3.ShowDialog(); }
先給賦值,然后在Form3中取值
public Form3() { InitializeComponent(); label1.Text = Form2.xvalue;//Form2實際也是個class,直接取靜態值即可,如果靜態變量xvalue定義在其他類中,即將Form2替換即可 }
效果圖上
3、通過共有屬性傳值
首先在要打開的Form中創建一個共有屬性,然后在調用窗口賦值即可。比如下面Form2啟動Form3,即給Form3的yvalue傳值
(1)在Form3中定義共有屬性
public string yvalue { get { return label1.Text.ToString(); } set { label1.Text = value; } }
(2)Form2中啟動Form3,並傳值
private void button2_Click(object sender, EventArgs e) { Form3 fr3 = new Form3(); fr3.yvalue = "要傳的值啊"; fr3.ShowDialog(); }
4、通過Owner屬性傳值
(1)在調用者Form2中申明一個公有變量,並賦值,設置需要啟動的Form3的Owner
public string xvalue; private void button2_Click(object sender, EventArgs e) { xvalue = "Form2要傳的值"; Form3 fr3 = new Form3(); fr3.Owner = this; fr3.ShowDialog(); }
(2)啟動窗體Form3中取值
private void Form3_Load(object sender, EventArgs e) { Form2 fr2 = (Form2)this.Owner; label1.Text = fr2.xvalue; }
這種方法實際是將Form2傳給了Form3,因此Form3可以取到Form2的所有公有變量和屬性。
5、委托傳值(推薦)
委托傳值主要用在子窗體給父窗體傳值上,即上文的Form3給Form2傳值
(1)先在Form3中申明委托
public delegate void PutHandler(string text); public PutHandler putTextHandler;//委托對象 private void button1_Click(object sender, EventArgs e) { if (putTextHandler != null) { putTextHandler(textBox1.Text.ToString()); } }
(2)在Form2中綁定委托事件
public void getValue(string strV) { this.textBox1.Text = strV; } private void button1_Click(object sender, EventArgs e) { Form3 fr3 = new Form3(); fr3.putTextHandler = getValue; fr3.ShowDialog(); }
效果圖
當然還有其他的傳值方式,又興趣的朋友可以再研究。