分享一个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数据响应的基 ...
随机推荐
- BZOJ 1010: [HNOI2008]玩具包装toy
职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 1010 题目大意:见原题. 算法分析: 设s[i]为c[i] ...
- HBase加Solr
HBase加Solr 如何解决分布式系统数据事务一致性问题 (HBase加Solr) 摘要:对于所有的分布式系统,我想事务一致性问题是极其非常重要的问题,因为它直接影响到系统的可用性.本文以下所述所要 ...
- 第20章 状态模式(State Pattern)
原文 第20章 状态模式(State Pattern) 状态模式 概述: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表 ...
- 带你轻松玩转Git--瞬间创建本地仓库
在上一篇文章中我们对版本控制有了一个比较宏观的了解,同时也能够看到Git 所处在的历史地位.并且对版本控制系统的体系进行了一个宏观的对比,貌似让读者看起来挺复杂的样子. 笔者将会尽可能的简单向大家分享 ...
- hdu Word Amalgamation(map)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113 找单词 #include <iostream> #include <strin ...
- 取一种类型里面的产品销售前3甲的数据Sql
需求:取出每种分类里面的销售前3甲的产品信息 表设计如下图: 数据如下: 两种方法可以实现: 1. SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION ...
- C#按LastID进行分页——与lambda形成链式
public static class PageHelper { /// <summary> /// 按页码分页 /// </summary> /// <param na ...
- Ubuntu14.04安装一个小问题,搜狗输入法
罕见的搜狗输入法支持ubuntu.尝试了决定性下载. 官方网站:http://pinyin.sogou.com/linux/ 官网教程:http://pinyin.sogou.com/linux/he ...
- Unit Test Via Visual Studio
转载Unit Test Via Visual Studio-Part1 写在开头:Coding ain't done until all the tests run. No unit test no ...
- ar命令提取.a时刻,一个错误 is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
在减压.a当文件,据报一个类别似 xxx.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)的错误,经过查找资料,原来是由于该.a文 ...