博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用委托自定义事件
阅读量:4588 次
发布时间:2019-06-09

本文共 1642 字,大约阅读时间需要 5 分钟。

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

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

 

我们先看看最常用的一个事件: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)简介”。

转载于:https://www.cnblogs.com/opop/p/5276544.html

你可能感兴趣的文章
伤心啊
查看>>
Microsoft Lync 2010 图像替换
查看>>
iOS开发UI篇—iPad开发中得modal介绍
查看>>
List与String数组转换
查看>>
网站发布帮助文档
查看>>
springmvc手动渲染jsp
查看>>
读取config配置
查看>>
第三方登录开发-Facebook
查看>>
SQL 语句中 AS 别名,别名含有特殊符号的处理方法
查看>>
天天看 高清影视 6.7.9.12 去广告精简 安装版
查看>>
设计器打开某表单时提示:[某某表单]已经由用户[xxx]打开需解锁
查看>>
常见排序算法(一)
查看>>
iOS自动处理键盘事件的第三方库:IQKeyboardManager
查看>>
【Oracle】系统视图USER_TAB_COLS和USER_TAB_COLUMNS
查看>>
spark学习笔记总结
查看>>
H5学习之旅-H5的框架(13)
查看>>
centos服务重启
查看>>
C#计算器代码
查看>>
KMP
查看>>
SDOI 2019 Round1 游记
查看>>