`
isiqi
  • 浏览: 16028860 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ASP.NET自定义控件事件响应

 
阅读更多

1.重载protected override bool OnBubbleEvent(object source, EventArgs args)
OnBubbleEvent是控件内包含的控件向外层控件作事件冒泡
-------------------------------------------------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;

public class uc_DanXuan : CompositeControl
{
private Button btnSave = null;
public EventHandler SaveAnswer; //定义这个是为了在控件外进行事件响应处理

protected override void CreateChildControls()
{
Controls.Clear();
btnSave = new Button();
btnSave.Text = "Click Me";
btnSave.CommandName = "事件的名字随便取"; //这是事件发生时,事件的名字,区分事件用
btnSave.CommandArgument = "事件的参数,看需要"; //这是事件发生后,用来传参数的,可以没有
Controls.Add(btnSave);
}

protected override bool OnBubbleEvent(object source, EventArgs args)
{
if (args is CommandEventArgs)
{
CommandEventArgs cmdArgs = args as CommandEventArgs;
//可以在这里加些代码,在控件内先处理一下
if(SaveAnswer != null) //如果要在外面处理,就到事件处理程序中去
SaveAnswer(source, args);
return true;
}
else
{
return base.OnBubbleEvent(source, args);
}

}
}
--------------------------------------------------------------------------------------------------------------------------------------

测试它:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
uc_DanXuan ucdx = new uc_DanXuan();
ucdx.SaveAnswer += new EventHandler(SaveAnswer); //要在外面处理事件
form1.Controls.Add(ucdx);

}
public void SaveAnswer(object sender, EventArgs args) //这里具体处理
{

}
}
---------------------------------------------------------------------------------------------------------------------------------------------

2.直接响应内部控件的事件
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;

public class uc_DanXuan : CompositeControl
{
private Button btnSave;
public event EventHandler SaveAnswer; //留给控件外部处理这个事件

protected virtual void OnSave(Object source, EventArgs e) //控件内部在这里处理这个事件
{
if (SaveAnswer != null)
{
SaveAnswer(this, e); //内部处理完了,再给外部处理
}
}

protected override void CreateChildControls()
{
Controls.Clear();
btnSave = new Button();
btnSave.ID = "btn";
btnSave.Text = "Save";
btnSave.Click += new EventHandler(OnSave); //响应按钮的click
this.Controls.Add(btnSave);
}

protected override void Render(HtmlTextWriter writer)
{
btnSave.RenderControl(writer);
}
}
测试代码同上

----------------------------------------------------------------------------------------------------------------------------------------
3.利用客户端javascript来回发?
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;

public class uc_DanXuan : CompositeControl, IPostBackEventHandler
{
private Button btnSave;
public event EventHandler SaveAnswer; //留给控件外部处理这个事件

protected virtual void OnSave(EventArgs e) //控件内部在这里处理这个事件
{
if (SaveAnswer != null)
{
SaveAnswer(this, e); //内部处理完了,再给外部处理
}
}

protected override void CreateChildControls()
{
btnSave = new Button();
btnSave.ID = "btn";
btnSave.Text = "Save";

//实用客户端javascript来完成事件回发
btnSave.OnClientClick = Page.ClientScript.GetPostBackEventReference(this, "save");

}
public override void RenderControl(HtmlTextWriter writer)
{
btnSave.RenderControl(writer);
base.RenderControl(writer);
}

void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
if (eventArgument == "save")
OnSave(new EventArgs());
}
}
测试代码同上

4.让TextBox响应onKeyDown
----------------------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;

public class uc_DanXuan : CompositeControl, IPostBackEventHandler
{
private TextBox tbx;

public event EventHandler OnKeyDown;

protected override void CreateChildControls()
{
Controls.Clear();
tbx = new TextBox();
tbx.ID = "tbx";
tbx.Attributes.Add("onkeydown", Page.ClientScript.GetPostBackEventReference(this, "onKeyDown"));
Controls.Add(tbx);
}

public void RaisePostBackEvent(string eventArgument)
{
switch (eventArgument)
{
case "onKeyDown":
if (OnKeyDown != null)
OnKeyDown(this, EventArgs.Empty);
break;
}
}
}
测试代码:
protected void Page_Load(object sender, EventArgs e)
{
uc_DanXuan ucdx = new uc_DanXuan();
ucdx.OnKeyDown += new EventHandler(ucdx_OnKeyDown);
form1.Controls.Add(ucdx);

}

void ucdx_OnKeyDown(object sender, EventArgs e)
{

}

分享到:
评论

相关推荐

    ASP.NET自定义Web服务器控件之Button控件

    主要介绍了ASP.NET自定义Web服务器控件之Button控件,详细讲述了Button控件的实现代码、前台页面的调用以及对应的事件响应代码,具有很好的参考借鉴价值,需要的朋友可以参考下

    ASP.NET4高级程序设计(第4版).zip.001|中文版.完整书签

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    ASP.NET完全入门PDF

    第一篇 概论 第一章 微软.NET战略和ASP.NET简介i. 微软.NET的历史 ii. ASP.NET历史iii. 众说纷纭.NET iv. ASP.NET综述 v. 小结第二章 我的第一个ASP.NET程序 i. 配置开发环境ii. 运行配套光盘iii. 第一个例子iv. ...

    ASP.NET 4高级程序设计(第4版)源代码

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    asp.net高级程序设计 pro asp.net and .net 4.5

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    ASP.NET4高级程序设计(第4版)源码.zip

    《ASP.NET 4高级程序设计(第4版)》还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作...

    ASP.NET 4 高级程序设计(第4版).part1.rar

    《ASP.NET 4高级程序设计(第4版)》还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作...

    ASP.NET4高级程序设计(第4版).zip.002|中文版.完整书签

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    ASP.NET4高级程序设计(第4版).part5.rar

    《ASP.NET 4高级程序设计(第4版)》还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作...

    ASP.NET 3.5 开发大全

    4.6 ASP.NET生命周期中的事件 4.6.1 页面加载事件(Page_PreInit) 4.6.2 页面加载事件(Page_Init) 4.6.3 页面载入事件(Page_Load) 4.6.4 页面卸载事件(Page_Unload) 4.6.5 页面指令 4.7 ASP.NET网站文件类型 ...

    ASP.NET3.5从入门到精通

    4.6 ASP.NET 生命周期中的事件 4.6.1 页面加载事件(Page_PreInit) 4.6.2 页面加载事件(Page_Init) 4.6.3 页面载入事件(Page_Load) 4.6.4 页面卸载事件(Page_Unload) 4.6.5 页面指令 4.7 ASP.NET 网站文件...

    《ASP.NET 4高级程序设计(第4版)》源码

    本书还深入讲述了其他ASP.NET 图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,本书专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软的ASP.NET AJAX 平台。另外,...

    ASP.NET 4高级程序设计(第4版)中文扫描版4/5

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax技术制作快速响应的页面,以及如何使用微软...

    ASP.NET 3.5 开发大全word课件

    4.6 ASP.NET生命周期中的事件 4.6.1 页面加载事件(Page_PreInit) 4.6.2 页面加载事件(Page_Init) 4.6.3 页面载入事件(Page_Load) 4.6.4 页面卸载事件(Page_Unload) 4.6.5 页面指令 4.7 ASP.NET网站文件类型 ...

    ASP.NET 4高级程序设计(第4版)中文扫描版5/5

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax技术制作快速响应的页面,以及如何使用微软...

    ASP.NET4高级程序设计(第4版).zip.003|中文版.完整书签

    书中还深入讲述了其他ASP.NET图书遗漏的高级主题,如自定义控件的创建、图像处理、加密等。此外,《ASP.NET 4高级程序设计(第4版)》专门提供了两章的内容来教你如何用Ajax 技术制作快速响应的页面,以及如何使用微软...

    ASP.NET 3.5 开发大全11-15

    4.6 ASP.NET生命周期中的事件 4.6.1 页面加载事件(Page_PreInit) 4.6.2 页面加载事件(Page_Init) 4.6.3 页面载入事件(Page_Load) 4.6.4 页面卸载事件(Page_Unload) 4.6.5 页面指令 4.7 ASP.NET网站文件类型 ...

    ASP.NET 3.5 开发大全1-5

    4.6 ASP.NET生命周期中的事件 4.6.1 页面加载事件(Page_PreInit) 4.6.2 页面加载事件(Page_Init) 4.6.3 页面载入事件(Page_Load) 4.6.4 页面卸载事件(Page_Unload) 4.6.5 页面指令 4.7 ASP.NET网站文件类型 ...

    asp.net 完全入门

    第一章 微软.NET战略和ASP.NET简介 i. 微软.NET的历史 ii. ASP.NET历史 iii. 众说纷纭.NET iv. ASP.NET综述 v. 小结 第二章 我的第一个ASP.NET程序 i. 配置开发环境 ii. 运行配套光盘 iii. 第一个...

    ASP.net入门教程

    ASP.NET 页框架为响应在服务器上运行的代码中的客户端事件提供统一的模型,从而使您不必考虑基于 Web 的应用程序中固有的客户端和服务器隔离的实现细节。该框架还会在页处理生命周期中自动维护页及该页上控件的状态...

Global site tag (gtag.js) - Google Analytics