此例的源碼在:http://download.csdn.net/source/688828
源碼包括了兩個form間傳值的幾種方式,第四種即是委託
---------------------------------------------------------------------------------------------------------------------
委託,就同C++裏面的回調函數一樣,用函數作參數。VC++中的鉤子的應用也是回調函數的一個例子,在C#裏是委託,其實都是一回事。
提前說明一句:事件其實就是委託的一個集合,對其的操作只能用+=,或 -=來操作,其它沒啥區別,都是表回調的。
開始來實現吧,委託懂了,事件就很好懂了,所以就不講事件了。
在子畫面先聲明一個委託。
public delegate void DelValueSend(object obj); //定義 一個委託
public DelValueSend delegateValue; //定義 一個委託變量
然後在主現在調用子畫面的時候,給委託賦值[注意,其值爲方法名,且此方法的類型與簽名要與子畫面定義的委託的類型和簽名是一樣的]
如下:
//Use Delegate to Send Value
private void btnCallSubForm4_Click(object sender, EventArgs e)
{
SubForm4 sf4 = new SubForm4();//調用子畫面
sf4.delegateValue = DelegateSendValue; //給委託賦值,其值爲一方法名
sf4.Show();
}
給委託賦值後就該實現這個方法了,記住,方法類型和簽名要與子畫面定義的一樣,如下:
//public delegate void DelValueSend(object obj);
public void DelegateSendValue(object obj)
{
//this.txtCallSubForm4.Text = obj.ToString();
//在此接收子畫面傳加來的值,或別的操作
}
再來看看子畫面,在什麼時候來觸發這個委託方法呢。我們把它放在一個button點擊事件裏觸發如下:
private void btnSendtoMainForm_Click(object sender, EventArgs e)
{
if (txtSub4Receive.Text.Trim() == "")
{
MessageBox.Show("Input something please");
}
else
{
//如果沒給委託賦值,則不做操作,給委託賦值則把值傳給主畫面
if (delegateValue != null)
{
delegateValue(txtSub4Receive.Text.ToString());
}
}
}