zoukankan      html  css  js  c++  java
  • 利用委托自定义事件

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

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

     

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

  • 相关阅读:
    星浩资本-以流程为中心
    BPM配置故事之案例13-触发消息通知
    BPM配置故事之案例12-触发另外流程
    【从零开始学BPM,Day5】报表配置及自定义功能页面开发
    BPM配置故事之案例11-操作外部数据源
    BPM配置故事之案例10-获取外部数据
    [转]页游开发中的 Python 组件与模式Presentation Transcript
    Creating a Game with CocosBuilder
    As3 Practises : use TheMiner do as3 project swf performance profile , find memory leak!
    Manual Install Cocos2d-x vc template on Windows 7
  • 原文地址:https://www.cnblogs.com/opop/p/5276544.html
Copyright © 2011-2022 走看看