zoukankan      html  css  js  c++  java
  • c#事件的实际应用场景

    最简单的定义事件的语法
    public event Action<bool> Refreash;
    先介绍这个Action
    这个Action是委托的快速实现方式,我用.net framework3.5是支持的,但不知道2.0的支持不。Action的委托不支持返回值,但可以支持有参数,其中bool就是一个参数。
    另一种支持返回值和参数的是Func<int,bool>,这个意思是接受int参数,返回bool类型。它也可以只有返回值比如Func<bool> 就返回bool类型。
     
    这个委托就是让方法也变成普通参数那样能被赋值,能被一个变量代替。
    比如有个方法:
    double Add(double a,double b){
    return a+b;
    }
    //我们定义一个委托
    Func<double,double,double> funcAdd;
    //给这个变量赋值
    funcAdd=Add;
    调用
    funcAdd(1.0+2.0);
    就这样就是委托。
     
    事件就是在委托的基础上加上个event关键字就行了。
     
    事件使用的语法是+=和-=
    比如这里
    ucData1.Refreash += UcData1_Refreash;
    UcData1_Refreash这个就是方法。
    我就来说说我写的自定义事件的一个场景。
    我写了两个自定义控件,一个是汇总查询条件的控件:UCFilter,一个是展示查询后的数据的控件:UCData,
     
    我把他们放在Form里面,当我在UCData里点击上传按钮得时候,我得刷新这个控件。就需要去调用UCFilter得查询单据按钮。所以我不可能把更新写在UCData得上传按钮得事件里面去。
     
    这个时候我就想到 了事件,我在UCData里添加事件:
    public event Action<bool> Refreash;
    调用事件是在上传按钮里的:
    private voidb tn_upload_Click(object sender, EventArgs e){
    ....
    上传
    ....
    更新
    if (Refreash != null)
    {
    Refreash(true);
    }
     
     
    }
    这里就是事件厉害的地方了,它让我能把要执行的代码交给第三方Form窗体。Form窗体里有UCFilter的变量,我就可以在Form窗体里调用查询数据的方法了。代码就像这样:
    load事件里注册事件:
    ucData1.Refreash += UcData1_Refreash;
    这就使得Refreash != null
    然后我就在Form里面写了事件的实现。
    private void UcData1_Refreash(bool obj)
    {
    if (obj)
    {
    this.ucData1.dgv.DataSource=this.ucFilter1.LoadProcData();
    }
    }
    this.ucFilter1.LoadProcData()就是查询控件获取数据的方法。
     
    另外要说的是在使用自定义控件的时候,把控件里的控件的权限改为public要方便很多,就是这个属性


  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/13651688.html
Copyright © 2011-2022 走看看