在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
推荐: