任務(wù):在窗體1點(diǎn)擊按鈕顯示窗體2此熬,在窗體2點(diǎn)擊按鈕將該窗體TextBox的值傳遞給窗體1的Label
直接看代碼(窗體1的代碼)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FormSendValueToForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//將Form2傳遞過來的值賦值給LabelOne
public void ShowText(string str)
{
labelOne.Text = str;
}
private void buttonOne_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(ShowText);
form2.ShowDialog();
}
}
}
窗體2的代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FormSendValueToForm
{
//與窗體1的ShowText方法簽名相同的委托類型
public delegate void DelSendValue(string str);
public partial class Form2 : Form
{
//委托類型字段权均,存儲(chǔ)Form1傳送過來的函數(shù)
private DelSendValue delMethod;
public Form2(DelSendValue del)
{
this.delMethod = del;
InitializeComponent();
}
//通過委托傳值給窗體1垛叨,實(shí)際上運(yùn)行的是窗體1的ShowText方法
private void buttonTwo_Click(object sender, EventArgs e)
{
this.delMethod(textBoxTwo.Text);
}
}
}
窗體1點(diǎn)擊按鈕顯示窗體2坏瘩,在窗體1創(chuàng)建一個(gè)ShowText方法(返回值為Void介牙,參數(shù)為String)用于給Label賦值银受。
窗體2聲明一個(gè)委托類型圈膏,以及該委托類型的字段塔猾,用于存儲(chǔ)窗體1傳遞過來的函數(shù)。
點(diǎn)擊窗體2的按鈕將TextBox的值傳遞給窗體1的Label稽坤,實(shí)際上運(yùn)行的是窗體1的ShowText方法丈甸。
簡(jiǎn)言之:
窗體1說:我有妹子(方法),你有酒(值)尿褪。但是我沒有辦法直接用你窗體2的酒睦擂,你也沒有辦法用我的妹子(方法),既然這樣的話杖玲,你窗體2先找個(gè)咱倆都信得過的中間人(聲明一個(gè)委托)顿仇,我的妹子和你中間人聯(lián)系(方法和你委托簽名一致),咱們兩個(gè)合作一下【饰牛可是你窗體2不要隨便出來鸿吆,我告訴你啥時(shí)候可以露面了你再出來(窗體2要顯示還得通過我窗體1的按鈕點(diǎn)擊才可以)。如果你窗體2覺得我窗體1靠譜的話述呐,你出來的時(shí)候我就把我的妹子帶上親自交到你手中(我窗體1把自己的方法通過窗體2的構(gòu)造函數(shù)給你傳過去)惩淳,妹子平常都是我自己享用的(這個(gè)函數(shù)平常是我窗體1自己用來給自己的Label賦值的),你窗體2可得好生照顧芭野帷(窗體2暫時(shí)在構(gòu)造函數(shù)里面先用你的委托字段把我的方法保存好)思犁。
窗體2說:你好,窗體1进肯,你的妹子已經(jīng)來到我這兒了(窗體1發(fā)過來的方法我已經(jīng)通過我的構(gòu)造函數(shù)保存好了)抒倚。今天玩的很高興!為了表達(dá)我的誠意坷澡,妹子回去的時(shí)候托呕,我窗體2已經(jīng)發(fā)信息告訴讓咱倆的中間人給妹子懷里塞了一瓶我珍藏多年的好酒,請(qǐng)接收F盗病(窗體2在按鈕點(diǎn)擊事件里面調(diào)用了委托项郊,委托里面有你窗體1的方法,所以我窗體2把我的TextBox里面的值通過該委托給你傳遞過去了斟赚!實(shí)在不好意思哈着降,為了給你帶酒,也只好委屈妹子了(為了給你窗體1傳值拗军,我間接的調(diào)用了你窗體1的ShowText方法)任洞!
窗體1:OK,我已經(jīng)收到 了你窗體2的美酒发侵,感謝=惶汀(窗體1收到窗體2傳過來的值了)!合作愉快刃鳄!