利用委托自定义事件

利用委托自定义事件

  (2011-01-28 10:49:02)
标签: 

自定义事件

 

委托

 

窗体

 

加载

 

本质

分类: 提高班总结

事件,这个大家都非常熟悉的名词,代码里几乎离不开它。但是我们平时都是用现成的事件,如果满足不了我们的需求怎么办?那就只能咱自己写了,那么问题就来了,如何自定义事件呢?

在这之前,我们就必须先了解事件与委托的干系是什么,只有弄清楚事物的本质,我们才能掌握住事物的灵魂。

 

我们先看看最常用的一个事件:Form_Load()

public Form1()

{

    InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

    MessageBox.Show("窗体加载了");

}

这个事件平时是自动发生的,那么我们现在来手动发生这个事件,来研究一下事件的底层。

 

public Form1()

{

    InitializeComponent();

    this.Load += new EventHandler(form_load);

}

public void form_load(object sender, EventArgs e)

{

    MessageBox.Show("窗体加载了");

}

this.Load其实.net还是为你自动封装了,那么我们进一步手动发生这个事件。

 

public event EventHandler load;

public Form1()

{

    InitializeComponent();

    load += new EventHandler(form_load);

    load(this,new EventArgs());

}

public void form_load(object sender, EventArgs e)

{

    MessageBox.Show("窗体加载了");

}

那么到这里是不是就完了呢?不知道有没有人问,form_load的方法还是很像Form1_Load,那个要是自己定义的话,那才叫完全的手动实现呢。那么我们接着往下看:

 

private delegate void FormLoadEvent(string msg);

private event FormLoadEvent load;

public Form1()

{

    InitializeComponent();

    load += new FormLoadEvent(form_load);

    load("窗体加载了");

}

public void form_load(string msg)

{

    MessageBox.Show(msg);

}

这下终于明白事件的本质了吧,事件是委托的最终表现形式,也就是说事件就是委托的一种高级用法,事件就是利用委托实现的。

 

但是事件和委托还有一定区别,委托是一个类,而事件是依赖于类的,所以委托可以声明在类的外面,而事件必须写在类的里面。

事件必须建立在委托的基础上才能得以实现,即先声明委托再定义事件,所以格式一般比较固定,例如:

private delegate void FormLoadEvent(string msg);

private event FormLoadEvent load;

由于事件是可连续触发的,所以对于事件的赋值要采用“+=”和“-=”运算,“+=”代表累积事件,“-=”代表移除某一事件,例如:

load += new FormLoadEvent(form_load);

在实例化委托【new FormLoadEvent】时把form_load当做参数写入。这样就将事件与自己写的方法进行了关联。

 

这里就为大家介绍了利用委托自定义事件的基础了,只要理解到位,日后熟能生巧,再遇上复杂的事件代码相信也会迎刃而解!但要想很好的掌握自定义事件,就必须先学好委托,关于委托的介绍,可以参见我的博文“委托(Delegate)简介”。

我的更多文章:

0

0

阅读 (488)   评论  (5) 收藏 (0)  转载 (4)   喜欢   打印 举报
已投稿到:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值