• Visual Studio 项目很容易被看作一系列顺
序执行的过程。事实上,多数程序都是事
件驱动的——即执行流程是由外界发生的
事件所确定的。
• 事件是一个信号,它告知应用程序有重要
情况发生。例如,用户单击窗体上的某个
控件时,窗体引发一个Click 事件并调用一
个处理该事件的过程。
C#中使用事件需要的步骤
1.创建一个委托
2.将创建的委托与特定事件关联
3.编写事件处理程序
4.利用编写的事件处理程序生成一个委托实例
5.把这个委托实例添加到产生事件对象的事件
列表中去,这个过程又叫订阅事件
ASP.NET中的事件
ASP.NET支持3个主要的事件组:
• 第一组包含在asp.net生成页面时自动发生,
我们使用这些事件建立页面
• 第二组包含了用户与页面交互时发生的所
有事件(这种最强大)。
• 第三种是html内部的事件,这些事件在浏览
器上执行。
ASP.NET窗口事件处理
• 事件驱动(Event Driven)是窗口程序设计的核
心,其重要性就相当于VC中的消息映射,不
了解事件驱动就无法深入窗口程序设计的殿堂。
• 在C#语言中,事件的处理主要有两种方法:
– 委托式的事件处理模式(Delegation Event Model)
– 对可重载方法(Event Method)的重载。
委托式的事件处理模式
委托式事件处理模式,就是将特定的事件委托给负
责事件处理的方法来进行。
• 在.NET中,类有数据成员与函数成员、事件成员。
事件成员就是那些与该类的对象相关的事件。
• 事件处理可通过委托关系来进行。委托关系可以这
样来建立:
object.Event+=new EventHandle(Method); 其含
义是:如果对象object发生了Event事件,就交由方
法Method来处理。一个对象可以委托多个不同的
处理,“+=”用来增加新的委托关系。
委托式的事件处理模式
• Method是真正进行事件处理的地方,格式为:
public void Method(object sender,EventArgs
e);
EventArgs是.NET Framework中有关事件的
基础类,所有发生的事件都被包装成
EventArgs类或其子类的对象。当事件发生
时,Method会收到这两个参数。一旦建立了
委托关系,系统自动在特定事件发生时,转而
执行您所委托的事件处理方法。
重载事件方法
• 在C#中,针对不同类所相关的事件,除了定义有
事件成员外,也定义了可重载的事件方法,可通
过重载这些事件方法来设计你所希望的对应事件
处理。
• 这些可重载的事件方法名称皆以“On”开头,且被
声明为“virtual”,一个被声明成virtual的方法,就
代表它可被重载,被声明成override的方法也代表
它可被重载,如果声明成abstract则必须被重载。
例如按钮的Click事件,就有一个对应的可重载的
OnClick事件方法。
ASP.NET服务端添加客户端事件
• 尽管从技术角度讲,Microsoft® ASP.NET
服务器控件的所有功能都可以在服务器端
执行,但通常情况下通过添加客户端脚本
可以大大增强服务器控件的可用性。例
如,ASP.NET 验证Web 控件可以在服务
器端执行所有的验证检查。但是,对于高
版本浏览器,验证Web 控件也会发送客户
端脚本,以在客户端进行验证。
ASP.NET 服务器控件可以发送两种客户端
脚本:
• 客户端脚本块:客户端脚本块通常是用
JavaScript 编写的,其中通常包含在发生特
定的客户端事件时执行的函数。
• 客户端HTML 属性:客户端HTML 属性提
供将客户端事件与客户端脚本联系在一起
的方法。
ASP.NET中发送客户端脚本块
使用System.Web.UI.Page 类包含的两个方
法可以将客户端脚本代码发送到由
ASP.NET Web 页面提供的HTML 中:
• RegisterStartupScript(key, script) :在
Web 窗体的结尾处(在</form> 标识之前)
发送脚本块。
• RegisterClientScriptBlock(key, script):在
Web 窗体的开始处(紧接着<form
runat=“server”> 标识之后)发送脚本块。
ASP.NET 中发送HTML 属性
• 这种方法通常只适用于从
System.Web.UI.WebControls.WebControl 类导
出的服务器控件,因为从这个类导出的控件会发
送某些HTML 元素。
• WebControl 类包含一个将HTML 元素属性添加
到由Web 控件发出的HTML 元素的方法。该方
法称为AddAttributesToRender(),它只有一个输
入参数,即HtmlTextWriter 的实例。
控件定位
回车默认
Q:在ASP.NET程序开始的时候,如何直接弹出一个网页对话框,同时看不见父页面。也就是说只看到一个登录窗口(网页对话框形式的)。
A:需要用javascript实现。要用window.showModalDialog()。在Page_Load中添加以下代码:
If (!IsClientScriptBlockRegistered("clientScript"))
{
string strScript = "<script>" ;
strScript += "function OpenWin(){";
strScript += "var str=window.showModalDialog('WebForm2.aspx',document.Form1.TextBox1.value)";
strScript += "if(str!=null) document.Form1.TextBox1.value=str";
strScript += "}";
strScript += "</script>";
RegisterClientScriptBlock("clientScript", strScript);
}
Button1.Attributes.Add("onclick", "OpenWin()");