C#.Net工作笔记017---C#事件的理解以及自定义事件的方法
技术交流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#事件的理解以及自定义事件的方法相关推荐
- 「后端小伙伴来学前端了」关于Vue中的自定义事件,组件绑定自定义事件实现通信
傍晚的月亮 前言 原本这篇打算写Vue中的那个全局事件总线的原理,但是发现自己少写了这个自定义事件,不讲明白这个自定义事件的操作,不好写全局事件原理,于是就有了这篇文章拉. 一.v-on指令 要讲自定 ...
- Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义
new Event 自定义事件 new Event(typeArg, eventInit) typeArg 事件名称 eventInit "bubbles",可选,Boolean类 ...
- C#.Net工作笔记018---葡萄城控件FlexGrid自定义单元格_以及给自定义控件添加自定义事件
技术交流QQ群[JAVA,C,.NET,BigData,AI]:170933152 工作需要,给flexgrid添加自定义类型的单元格,这里自定义了一个radiobutton. 下面这个案例可 以在f ...
- android友盟自定义事件,友盟:自定义事件
1.1 自定义事件类型说明 友盟为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节.我们提供了两种自定义事件的形式:计数事件.计算事件. 1.1.1 计数事件 计数事件统计事件的发 ...
- C++_选择结构_switch语句_循环结构while_while案例猜数字_do while循环_dowhile案例水仙花数_---C++语言工作笔记017
跟java一样啊
- Sharding-JDBC读写分离_实现_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记017
前一节,我们配置好了,mysql的主从数据库,以及mysql主从库中的数据同步, 然后,现在我们使用sharding-jdbc,实现读写分离. 首先我们需要在application.propertie ...
- Elasticsearch--高级-映射mapping 创建---全文检索引擎ElasticSearch工作笔记017
然后我们再来看一下这个,es中的映射,这个映射的意思其实就是,我们说 es中,有索引,相当于mysql中的数据库,然后类型相当于mysql中的数据表,然后 一个文档,相当于mysql中的一行数据,然后 ...
- ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017
然后我们去看Symbol的内置的一些属性 可以看到有很多,有11个一共 他的功能就是,给类,或者给上面的这些方法,添加,一些自定义的方法 当执行上面的方法的时候就会调用自己定义的方法. 这里我们用了个 ...
- Database工作笔记-对层次库的理解
因为工作需要,接触了层次库的概率,特在此写下今天对层次库的感悟,当然,本人的博客,不会暴露本人所待的公司的秘密. 下面是我自己对层次库的理解,在后面会加入网络上面的有关的知识: 关系型数据库-> ...
最新文章
- 机器人“快递小哥”上岗了!京东配送机器人编队长沙亮相
- 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
- “让技术做好事”,最特殊的创投在大湾区成立
- python手机版怎么运行项目或脚本-python脚本运行的几种方式
- 子页面跳转到父页面指定地方
- android立体3D效果_怀化400T吨龙门剪图纸3d模型_临沂1500T吨剪图纸原理图-皇宏液压...
- 拼多多再添新瓜!15 岁上浙大、22 岁获世界冠军的天才黑客 Flanker 疑因拒绝违法攻击被强制开除...
- windows服务器管理(1)——WinServer2012 开启中文语言包(无需下载补丁)
- 网络系统设计的一般步骤
- WebSocket 协议 RFC 文档(全中文翻译) 1
- 人人框架 mysql8.0_人人开源框架学习笔记
- LPC2478时钟模块详解
- React实现H5横屏电子签名板
- 使用vue-pdf-signature实现pdf预览
- 知乎周源微信_每周源代码34-F#的兴起
- Texture Haven Spider
- 淘宝店铺宝贝批量复制工具
- Google Earth Engine(GEE)——随机森林分类法绘制了2000年、2010年和2020年圭亚那的红树林APP详细代码
- Google Chrome 旧版本下载地址
- 你知道Oracle的数据文件大小有上限么?
热门文章
- 宅在家里写数据库中事务(ACID)
- 2020年Java学习计划祝大家新年快乐
- HDU-Keywords Search(AC自动机)
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position xx
- Pytorch:variable中grad属性和backward函数grad_variables参数的含义
- 【转】DICOM 网关的设计与实现
- elasticsearch5.3安装kibana、x-pack插件、elasticsearch-an
- 层层递进——宽度优先搜索(BFS)
- 编程语言发展史上有哪些趣事?
- VS2012 安装出错 :通道正在关闭