{
public partial class Form1 : Form
{
//定義委托
public delegate void ChangeTextHandler(string text);//******************** 1
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)//****************** 2
{
Form2 frm2 = new Form2();
frm2.cth = new ChangeTextHandler(ChangeLable);
frm2.Show();
}
/// <summary>
/// 委托關聯的方法
/// </summary>
/// <param name="str"></param>
public void ChangeLable(string str) //************************************ 3
{
label1.Text = str;
}
}
}
另壹個窗體
namespace WindowsApplication3
{
public partial class Form2 : Form
{
public WindowsApplication3.Form1.ChangeTextHandler cth; //*************** 4
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) //*************** 5
{
cth(textBox1.Text);
}
}
}
A>首先看 1,這裏我們在Form1類中定義了壹個委托,委托的名稱是ChangeTextHandler,返回值是void,參數是壹個string;
B>看2,這裏我們即將創建壹個委托對象,創建的方法是 new 委托名(委托指代的方法);這裏委托指代的方法就是ChangeLabel,這個方法是屬於Form1類的,請記住
C>等等,妳有沒有註意到,2中我們的委托對象是誰?cth,它在Form2裏進行了聲明,請看4,所以它是屬於Fom2類創建的對象的,因此才使用frm2.cth的寫法
C>好了,然後我們看整個程序是怎樣運行的:
1.vs啟動了Form1,Form1初始化完畢;
2.用戶點擊了button1,引起了button1_Click方法的執行;
Form2 frm2 = new Form2(); //frm2這個窗體對象生成並初始化,此時,frm2裏面有壹個cth的委托聲明和壹個button1_Click方法
frm2.cth = new ChangeTextHandler(ChangeLable); //frm2的cth正式從聲明變成了真正的委托對象,它指代ChangeLable方法
frm2.Show(); //frm2顯示
3.用戶點擊了frm2上的button1(可以這樣理解,妳在設計視圖裏設計的窗體是壹個類,但是當妳F5之後,妳所看到的窗體叫做窗體對象),button1_Click方法被執行
cth(textBox1.Text); //cth指代ChangeLabel,相當於執行了ChangeLabel(textBox1.Text),因此,窗體2上的文本框內容賦值給窗體1的標簽!
兄弟註意壹下啊,妳的label拼寫錯誤啦