技术交流QQ群【JAVA,C,.NET,BigData,AI】:170933152

哈哈,拿来主义,根据下面的这篇博文,我给葡萄城flexgrid控件,自己做了个自定义的单元格,然后利用flexgrid官方给的sample,中的hostControl,来给hostControl,添加了自己定义的事件,从而实现了对,自己定义的单元格类型的,事件控制.关于c#的事件,之前没有弄过,可以根据下面这个博文理解一下.,看着这个就可以做出来

给某个控件添加删除事件:

testFlexGrid.BeforeEdit -= new C1.Win.C1FlexGrid.RowColEventHandler(this.testFlexGrid_BeforeEdit);
 testFlexGrid.AfterEdit-= new C1.Win.C1FlexGrid.RowColEventHandler(this.testFlexGrid_AfterEdit);

给某个控件添加事件:

testFlexGrid.BeforeEdit += new C1.Win.C1FlexGrid.RowColEventHandler(this.testFlexGrid_BeforeEdit);
 testFlexGrid.AfterEdit += new C1.Win.C1FlexGrid.RowColEventHandler(this.testFlexGrid_AfterEdit);

事件的理解:

  在skyline项目的开发中,遇到了一个新的知识:事件。

  在程序中,我希望实现一个功能,当视点坐标移动的时候可以实时的得到视点的坐标。这里就需要使用事件这个概念:当坐标发生移动,则触发了一个特定的事件,他可以发出一个信号,而用户可以自定义一个函数(参数必须与事件委托的参数相同,这个后面解释),当他发出一个信号,我就可以执行这个函数。

  比方说:甲和乙是朋友,上午见面了,乙和甲说,今天中午吃完饭叫我一声,我带你去网吧玩。

  在这个情景中,甲吃饭这件事情是乙没有办法控制的。他只可以等甲吃完饭以后发一个信号,才可以做带甲去网版的这个方法。当然乙可以蹲在甲的家门口一直看着甲,等甲吃完饭然后就可以带他去网吧,但是这样的话,是不是很浪费乙的时间呢。

  同样的,skyline的项目中,我们也可以做一个无限的循环,随时记录这视点坐标的参数,然后在循环的下一次得到视点坐标参数再和刚刚那一次做比较,如果不同的话就执行希望运行的那个函数。而这样的话对于程序来说会形成一个死循环,是没有意义的。

  下面写一个小程序来具体化一下这个甲和乙的小故事:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Sample001
{public delegate void InformHandle(object sender);public class JIA{public event InformHandle EatOver;public void eat(){Console.WriteLine("吃饭中......");System.Threading.Thread.Sleep(2000); //吃饭事件两秒OnEating();  //这个相当于是一个信号,当运行这个函数的时候会发出一个信号。}public virtual void OnEating(){if (EatOver != null){EatOver(this);}}}public class YI{public void TakeJiaToWangBa(object sender){Console.WriteLine("带"+sender.ToString()+"去网吧!");}}class Program{static void Main(string[] args){JIA jia1 = new JIA();YI yi1 = new YI();jia1.EatOver += new InformHandle(yi1.TakeJiaToWangBa);Console.WriteLine("空闲中");Console.WriteLine("现在甲不知道在干什么");jia1.eat();Console.WriteLine("去了网吧通宵一个晚上到了第二天中午");jia1.eat();Console.ReadKey();}}
}

运行结果如图:

这个代码的意义在于说明,乙的TakeJiaToWangBa的方法只会在甲吃完饭这个事件发生的时候才会执行。当我们在Main方法中写入了

jia1.EatOver += new InformHandle(yi1.TakeJiaToWangBa);

这行语句,就表名了:当甲触发了EatOver事件的时候,就会发出一个信号,然后乙就开始执行TakeJiaToWangBa这个函数了。在后面的代码中我们就不必去关心什么时候执行TakeJiaToWangBa方法了。

还有一个问题就是甲是如何触发EatOver这个事件的呢,就是靠下面的这个代码来完成,甲在运行eat方法的时候,会执行OnEating方法。我对下面这段代码的原理也不是很理解。

        public virtual void OnEating(){if (EatOver != null){EatOver(this);}}

从功能上来说,当执行OnEatring方法时,就已经触发了EatOver事件。EatOver(this)的信号就已经发出去了。而且这个信号中还包含着一个参数(这个实例本身)。如果别人希望当触发这个事件之后运行自己希望运行的代码的话,就需要定义一个方法,这个方法也必须有一个与这个事件相同类型的参数(在这段代码中,他们的类型都是object),用户定义的这个方法在运行的时候就可以访问这个参数了。

这个参数的类型又是又什么决定的呢?是由委托来决定的!

    public delegate void InformHandle(object sender);

感觉说的不是很清楚,大概意思就是这样了,等我彻底搞清之后再对本文进行一下修改。如果大家对本文有什么疑问,或者想指点一下我的话可以发评论,我每天都会看的。谢谢啦!

C#.Net工作笔记017---C#事件的理解以及自定义事件的方法相关推荐

  1. 「后端小伙伴来学前端了」关于Vue中的自定义事件,组件绑定自定义事件实现通信

    傍晚的月亮 前言 原本这篇打算写Vue中的那个全局事件总线的原理,但是发现自己少写了这个自定义事件,不讲明白这个自定义事件的操作,不好写全局事件原理,于是就有了这篇文章拉. 一.v-on指令 要讲自定 ...

  2. Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义

    new Event 自定义事件 new Event(typeArg, eventInit) typeArg 事件名称 eventInit "bubbles",可选,Boolean类 ...

  3. C#.Net工作笔记018---葡萄城控件FlexGrid自定义单元格_以及给自定义控件添加自定义事件

    技术交流QQ群[JAVA,C,.NET,BigData,AI]:170933152 工作需要,给flexgrid添加自定义类型的单元格,这里自定义了一个radiobutton. 下面这个案例可 以在f ...

  4. android友盟自定义事件,友盟:自定义事件

    1.1 自定义事件类型说明 友盟为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节.我们提供了两种自定义事件的形式:计数事件.计算事件. 1.1.1 计数事件 计数事件统计事件的发 ...

  5. C++_选择结构_switch语句_循环结构while_while案例猜数字_do while循环_dowhile案例水仙花数_---C++语言工作笔记017

    跟java一样啊

  6. Sharding-JDBC读写分离_实现_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记017

    前一节,我们配置好了,mysql的主从数据库,以及mysql主从库中的数据同步, 然后,现在我们使用sharding-jdbc,实现读写分离. 首先我们需要在application.propertie ...

  7. Elasticsearch--高级-映射mapping 创建---全文检索引擎ElasticSearch工作笔记017

    然后我们再来看一下这个,es中的映射,这个映射的意思其实就是,我们说 es中,有索引,相当于mysql中的数据库,然后类型相当于mysql中的数据表,然后 一个文档,相当于mysql中的一行数据,然后 ...

  8. ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017

    然后我们去看Symbol的内置的一些属性 可以看到有很多,有11个一共 他的功能就是,给类,或者给上面的这些方法,添加,一些自定义的方法 当执行上面的方法的时候就会调用自己定义的方法. 这里我们用了个 ...

  9. Database工作笔记-对层次库的理解

    因为工作需要,接触了层次库的概率,特在此写下今天对层次库的感悟,当然,本人的博客,不会暴露本人所待的公司的秘密. 下面是我自己对层次库的理解,在后面会加入网络上面的有关的知识: 关系型数据库-> ...

最新文章

  1. 机器人“快递小哥”上岗了!京东配送机器人编队长沙亮相
  2. 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
  3. “让技术做好事”,最特殊的创投在大湾区成立
  4. python手机版怎么运行项目或脚本-python脚本运行的几种方式
  5. 子页面跳转到父页面指定地方
  6. android立体3D效果_怀化400T吨龙门剪图纸3d模型_临沂1500T吨剪图纸原理图-皇宏液压...
  7. 拼多多再添新瓜!15 岁上浙大、22 岁获世界冠军的天才黑客 Flanker 疑因拒绝违法攻击被强制开除...
  8. windows服务器管理(1)——WinServer2012 开启中文语言包(无需下载补丁)
  9. 网络系统设计的一般步骤
  10. WebSocket 协议 RFC 文档(全中文翻译) 1
  11. 人人框架 mysql8.0_人人开源框架学习笔记
  12. LPC2478时钟模块详解
  13. React实现H5横屏电子签名板
  14. 使用vue-pdf-signature实现pdf预览
  15. 知乎周源微信_每周源代码34-F#的兴起
  16. Texture Haven Spider
  17. 淘宝店铺宝贝批量复制工具
  18. Google Earth Engine(GEE)——随机森林分类法绘制了2000年、2010年和2020年圭亚那的红树林APP详细代码
  19. Google Chrome 旧版本下载地址
  20. 你知道Oracle的数据文件大小有上限么?

热门文章

  1. 宅在家里写数据库中事务(ACID)
  2. 2020年Java学习计划祝大家新年快乐
  3. HDU-Keywords Search(AC自动机)
  4. UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position xx
  5. Pytorch:variable中grad属性和backward函数grad_variables参数的含义
  6. 【转】DICOM 网关的设计与实现
  7. elasticsearch5.3安装kibana、x-pack插件、elasticsearch-an
  8. 层层递进——宽度优先搜索(BFS)
  9. 编程语言发展史上有哪些趣事?
  10. VS2012 安装出错 :通道正在关闭