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要方便很多,就是这个属性


  • 相关阅读:
    Oracle——Hint
    Oracle——package....包的概念和定义
    Oracle——sql语句执行步骤以及提高sql基本查询效率
    Oracle函数之捡漏篇
    Oracle 分析函数Over(partition by...)以及开窗函数
    初尝RabbitMQ消息队列
    Gerrit部署成功后project下不显示clone地址
    jenkins打包iOS 报错:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.
    gerrit 版本下载
    grep -w ,grep -e,grep -v的使用
  • 原文地址:https://www.cnblogs.com/HelloQLQ/p/13651688.html
Copyright © 2011-2022 走看看