本文共 717 字,大约阅读时间需要 2 分钟。
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); 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窗口不用去关注是谁调用了自己
转载地址:http://sjkzi.baihongyu.com/