分享一个C#自定义事件的实际应用
在C#.NET的开发中,事件是经常接触到的概念,比如为按钮添加点击事件,并写入点击按钮触发事件要运行的代码。不管是ASP.NET还是WinForm等各种形式的应用程序,最经常是为系统生成的事件写具体代码。如果要自定义事件呢?有的朋友对于自定义事件感觉比较难理解。最近在开发HoverTreeTop项目时,有一个自定义事件的实例,分享一下。HoverTreeTop是一个ASP.NET项目,有一个产品展示的功能,那么就需为产品添加图片展示(http://hovertree.com/top/htpro/5dbcb599663b3397.htm),如果是经常网购的朋友就很清楚的。HoverTreeTop项目中添加图片是作为一个独立的用户控件(UCPictureAdd.ascx)实现的,这样可提高代码复用性。产品和图片分别有各自的数据表(分别为HoverTreeTop_product和HoverTreeTop_picture),它们之间的关系也有一个表(HoverTreeTop_ProductPic)。
操作的流程为:先添加产品信息,再进入产品修改页(ProductAlter.aspx),在修改页中放置图片添加用户控件,使用用户控件成功添加图片后,再添加产品和图片关系。
那么在后台成功添加图片后,就需要为图片和产品指定关系。这里就用到了C#的自定事件。在添加上传图片的用户控件中,自定义委托和自定义事件,当成功添加图片后,就触发事件。而在引用用户控件的产品修改页中,则监听事件,指定事件触发所执行的方法。
请看UCPictureAdd.ascx.cs代码:
public delegate void OperateSuccessHanlder(string fileName); //创建委托 public event OperateSuccessHanlder OperateSuccess; void OnOperateSuccess(string fileName)
{
OperateSuccess?.Invoke(fileName);
}
protected void button_hewenqi_Click(object sender, EventArgs e)
{
OnOperateSuccess("hovertree");//这里传入值需换为实际值
}
ProductAlter.aspx.cs的代码:
protected void Page_Load(object sender, EventArgs e)
{ //为控件的事件添加监听方法
picAdd1.OperateSuccess += PicAdd1_OperateSuccess;
}
private void PicAdd1_OperateSuccess(string fileName)
{
//添加产品和图片关系
}
所以自定义事件的步骤简单来说就是,定义委托,定义事件,触发事件,监听事件。
涉及到的源码:
http://hovertree.com/top/code/hovertreepanel/htpanel/hcontrol/ucpictureadd.ascx.htm
http://hovertree.com/top/code/hovertreepanel/htpanel/hcontrol/ucpictureadd.ascx.cs.htm
http://hovertree.com/top/code/hovertreepanel/htpanel/hproduct/productalter.aspx.htm
http://hovertree.com/top/code/hovertreepanel/htpanel/hproduct/productalter.aspx.cs.htm
更详细代码可以下载项目源码:
http://hovertree.com/h/bjaf/hv6cqe5n.htm
转自:http://hovertree.com/h/bjag/cm8k4ja1.htm
推荐:
http://www.cnblogs.com/sosoft/p/kaifajishu.html
分享一个C#自定义事件的实际应用的更多相关文章
- 分享一个圆角自定义的漂亮AlertDialog
\res\drawable-hdpi\bg_title_custom_dialog.xml: <?xml version="1.0" encoding="utf-8 ...
- MUI APP关于页面之间的传值,plusready和自定义事件
最近在用MUI开发这个APP,发现有时候这个plusready不起作用,表现在,这个页面如果重复打开,这个plusready就进不去,然后上一个页面传过来的值,就没法接收了.这个经过MUI官方确认,是 ...
- Javascript之自定义事件
Javascript自定义事件,其本质就是观察者模式(又称订阅/发布模式),它的好处就是将绑定事件和触发事件相互隔离开,并且可以动态的添加.删除事件. 下面通过实例,一步一步构建一个具体的Javasc ...
- javascript中自定义事件
自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function ...
- js的自定义事件
js中的事件是js的一大技术点,说白了就是操作dom树的唯一途径. 关于事件无非两种绑定方式: document.getElementById('xxx').onclick = function(){ ...
- Vue中调用另一个组件中自定义事件
之前在一个场景中,遇到组件需要调用父组件中的方法tableInit(),字组件调用父组件常用的有三种方法,具体参考:https://www.cnblogs.com/jin-zhe/p/9523782. ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- 理解的javascript自定义事件
理解的javascript自定义事件 被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情, ...
- 由自定义事件到vue数据响应
前言 除了大家经常提到的自定义事件之外,浏览器本身也支持我们自定义事件,我们常说的自定义事件一般用于项目中的一些通知机制.最近正好看到了这部分,就一起看了下自定义事件不同的实现,以及vue数据响应的基 ...
随机推荐
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- 面向对象三大特征之多态——Java笔记(七)
多态: 同一个实体同时具有多种形式 编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定 如果编译时类型和运行时类型不同,就出现多态 例: clas ...
- android_Activity生命周期功能
说明:初步activity 生命周期7功能. 样本:于MainActivity我加了button,搬家button.跳到OtherActivity.控制台输出的观察. 让我们来看看这些功能: 他们的流 ...
- A hard puzzle 1097
Problem Description lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how ...
- VAXVOIP SDK Licensekey
Insert the following key to the SDK with SetLicenseKey call: VAXVOIP.COM-191P238P55P253P97P229P51P76 ...
- Matlab splinetx
function v = splinetx(x,y,u) %SPLINETX Textbook spline function. % v = splinetx(x,y,u) finds the pie ...
- 7.Swift翻译教程系列——控制循环的流程
英语PDF下载链接http://download.csdn.net/detail/tsingheng/7480427 Swift提供了类C语言类似的控制流结构.包含for循环和while循环来多次运行 ...
- 搭建一个BS 的简单SOA 架构(直接通过jquery 调用后台的 wcf 服务的架构)(第一天)
亲们!还在用传统的三层架构吗?你还在对SOA架构 不了解吗? 那就赶快来学习下一个 比较简单的SOA的架构吧!我会手把手的 教会你们怎么搭建这个 简单的SOA的架构. 其中用的技术点保证 WCF,a ...
- linux内核源码目录(转)
Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间. 源代码所有在目录:/usr/src/linux ...
- iOS开发---转换坐标系
- (void)viewDidLoad { [super viewDidLoad]; // 蓝色 UIView *blue = [[UIView alloc] init]; blue.backgrou ...