在面向对象的编程世界里流传着这样一句话:
Don’t call me,I will call you.”
这句话充分体现了事件的回调,今天就来讲一讲自定义事件委托。
前景:
点击父窗口中按钮1显示子窗口2,点击子窗口2中按钮,将子窗口中textbox中的内容显示在父窗口1中的label中。
要求不能修改控件的访问级别,使用事件和委托来实现。
事件委托的声明:
由于本文使用的不是匿名事件,所以需要定义委托来创建事件。下面的代码就声明了一个叫做updateui 的委托,要使用它,要求传过来的参数里满足括号里的类型一致。
复制
public delegate void updateui ( String str );
然后声明委托类型的事件。事件名自己定义,格式为 访问修饰符 event 委托 事件名;
复制
public event updateui upui;
如此我们就声明了一个名叫upui的事件,当这个事件发生的时候,它会调用委托方法来执行。
下面看实例:
Form1代码:
复制
public partial class Form1 : Form { public Form1 () { InitializeComponent (); } private void button1_Click ( object sender, EventArgs e ) { Form2 form2= new Form2 (); form2.upui += getstr;//将getstr方法加入到事件列表里 form2.Show (); } public void getstr (String str)//自定义修改UI方法 { this.label1.Text = str; } }
Form2:
复制
public delegate void updateui ( String str );//声明委托 public partial class Form2 : Form { public event updateui upui;//声明委托类型的事件 public Form2 () { InitializeComponent (); } private void button1_Click ( object sender, EventArgs e ) { upui ( textBox1.Text );//触发事件 } }
从上面可以很清楚的看到,触发事件时传递的参数,我们定义的委托需要的参数以及修改UI的方法的参数都是一样的字符串类型的。只有三方匹配了,才能正常使用!
评论 (0)