版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/never_tears/article/details/82851480
A1窗口打开B窗口,B窗口向A1窗口传值时使用到委托。只有A1打开B窗口时,可以直接在B调用A1中的(public)方法,这看不出委托的作用(前提是知道B窗口是A1窗口打开的)。
当有窗口A2也打开B窗口,同时需要B窗口返回值时,如果也在B中直接调用A2的(public)方法,就需要在B中判断是A1还是A2调用它,然后调用对应的窗口的方法来实现返回数据(前提是知道B窗口只被A1、A2调用)。
当打开B窗口的有n(未知)个时,显然直接调用父窗口的(public)方法这种做法已经不能实现数据反馈功能了。场景例如:B是下载窗口,下载完成时要向父窗口(A1、A2……)反馈数据。
委托代码例:
// 父窗口(A1):
B b = new B();
b.FeedBackEvent += new B.FeedBackHandler(DownLoad);
b.Show();
private void DownLoad(string msg)
{
……
}
// 子窗口(B):
public delegate void FeedBackHandler(string message);
public event FeedBackHandler FeedBackEvent;
private void button1_Click(object sender, EventArgs e)
{
string message = "下载完成";
this.FeedBackEvent(message);
}
这时,需要打开B窗口且需要返回数据的父窗口,可以通过注册B的委托(FeedBackEvent)来实现,且B窗口不用去关注是谁调用了自己