此例的源码在: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());
}
}
}