自定义控件事件
我们知道事件必须带两个参数的,一个是object ,传递的一般是事件的发起者,即在镶嵌有时间占位符的类内部传递 this。
另一个是一个 EventArgs 参数,我们可以定义自己的事件参数继承自 EventArgs 类,传递一些值从事件的发起者到事件的实现者。
例子如下,比如自己设计一个Button类
public class MyButton { public string caption="haha"; private string color = "red"; public event EventHandler OnClick; public void Doclick() { OnClick(this,new MyArgs(this.color) ); } }
设计自己的参数类MyArgs
public class MyArgs : EventArgs {
public string Color { get; set; } public MyArgs(string color):base() { this.Color = color; }
}
事件的注册与 实现者
static void Main(string[] args) { MyButton btn = new MyButton(); btn.OnClick += new EventHandler(btn_OnClick); // btn.OnClick += Program.btn_OnClick; also work btn.Doclick(); }
static void btn_OnClick(object o, EventArgs e) { MyButton b = o as MyButton; MyArgs ar = e as MyArgs; Console.WriteLine(b.caption); Console.WriteLine(ar.Color); Console.ReadKey(); }
上面两个转换能成功是因为面向对象中的,子类能替代父类句柄。