分享一个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数据响应的基 ...
随机推荐
- 【网络流量-二部图最大匹配】poj3041Asteroids
/* 这个问题将是每行一个x作为节点x,没有列y作为节点y,障碍物的坐标xy来自x至y的 边缘.图建的问题后,变成,拿得最少的点,因此,所有这些点与相邻边缘,即最小 点覆盖,与匈牙利算法来解决. -- ...
- do...while(0)神奇
1. do...while(0)消除goto语句. 通常,假设在一个函数中開始要分配一些资源.然后在中途运行过程中假设遇到错误则退出函数,当然,退出前先释放资源,我们的代码可能是这样: version ...
- php_公共方法01_传入数组_打印可见信息
function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'convert', $str ...
- Swift构造函数(Initializer)和析构函数(Deinitializer)
要初始化结构和类和其他类型的实例的属性. 默认的构造函数 struct Fahrenheit { var temperature: Doubleinit(){ temperature = 32.0 } ...
- ListView排序并隔色显示
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- mysql 千分位 Format
原文:mysql 千分位 Format select Format(123456789) 结果:123,456,789
- oracle中导入导出数据备份数据库
原文:oracle中导入导出数据备份数据库 数据库所在位置 将数据导出到的文件名 用户名 备份数据库 :exp c ...
- 图解IntelliJ IDEA v13应用服务器的运行配置
初步了解IntelliJ IDEA v13应用服务器以后,接下来我们将继续设置应用服务器的运行配置. Artifacts是IDE在通过运行配置时部署的一个服务.Artifacts包括名称.类型.输出目 ...
- C# 我的注册表操作类
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; using Syst ...
- mcstructs使用CMake生成Makefile文件
CMakeLists.txt project(MCSTRUCTS) set(SRC_LIST src/main.c src/mcslist.c src/mcsringbuf.c) add_execut ...