ASP.NET中的事件处理

C#中使用事件需要的步骤
1。创建一个委托
2。将创建的委托与特定事件关联
3。编写事件处理程序
4。利用编与的事件处理程序生成一个委托实例
5。把这个委托实例添加到产生事件对象的事件列表中去,这个过程又叫订阅事件

Part1:
简单的脚本注册:
if(!Page.IsStartupScriptRegistered("regName")&&!Page.IsPostBack)  //判断是否已经注册
{
 string s = @"<script language=""javascript"">alert(""send client script"");</script>";
 Page.RegisterStartupScript("regName",s);
}

Part2:
为<asp:DropDownList添加客户端的onchange事件:
function FunctionName(cmd)
{
 if(confirm("Are you sure?")) eval(cmd);
 else alert("Cancel");
}
string sService = Page.GetPostBackClientHyperlink(btnSave,""); //获取引用,最终onchange会调用btnSave事件
string sScript = @"Javascript:FunctionName(""OOKK"");";
sScript = sScript.Replace("OOKK",sService); //调用客户端函数FunctionName
dpTest.Attributes.Add("onchange",sScript);

//最终脚本: οnchange="Javascript:FunctionName(&quot;javascript:__doPostBack('btnSave','')&quot;); 

//参考:http://www.cnblogs.com/vipcjob/archive/2009/07/29/1534064.html Part3部分

Part3:
用户回车直接触发事件:
function SubmitKeyClick(button)  //传入button的ID
{   
 if (event.keyCode == 13) //回车键盘
 {       
  event.returnValue = false;
  document.all[button].click();  //触发button的服务端click事件(btnOK_Click)
 }
}
tbInput.Attributes.Add("onkeydown","SubmitKeyClick('btnOK');"); //输入框添加客户端始

Other:
onkeypress 是在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。
onkeyup 是在用户放开任何先前按下的键盘键时发生。
onkeydown 是在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。

委托与事件:

考参文章: http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx

ContractedBlock.gif ExpandedBlockStart.gif 委托实例
public class AppClass
ExpandedBlockStart.gifContractedBlock.gif
{
    
public delegate void 连接数据库委托();
    
private static void 连接Oracle数据库()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Console.WriteLine(
"已经连接到Oracle数据库\n");
    }

    
private static void 连接SqlServer数据库()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Console.WriteLine(
"已经连接到连接SqlServer数据库数据库\n");
    }

    
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        连接数据库委托 数据库连接; 
        数据库连接 
= new 连接数据库委托(连接Oracle数据库); 
        Console.WriteLine(
"<<仅连接到Oracle数据库"); 数据库连接();  //仅连接到Oracle数据库      
        数据库连接 = new 连接数据库委托(连接SqlServer数据库); 
        Console.WriteLine(
"<<仅连接到SqlServer数据库"); 数据库连接();  //仅连接到SqlServer数据库      
        数据库连接 = null
        数据库连接 
+= new 连接数据库委托(连接Oracle数据库); 
        数据库连接 
+= new 连接数据库委托(连接SqlServer数据库); 
        Console.WriteLine(
"<<同时连接到两个数据库"); 数据库连接(); 
        Console.Read();
    }

}

 //页面添加引用: using System.Threading;

ContractedBlock.gif ExpandedBlockStart.gif 事件实例
public class 饮水机
ExpandedBlockStart.gifContractedBlock.gif
{
    
private int 水量 = 10;
    
public delegate void 饮水机没水了委托(); 
    
public event 饮水机没水了委托 饮水机没水了;
    
public void 出水(int 出水量)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Console.WriteLine(
"有人接水");
        水量 
-= 出水量; 
        Console.WriteLine(
"桶里还剩{0}升水", 水量);
        
if (水量 == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            当饮水机没水了();
        }

    }

    
public void 当饮水机没水了()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if (饮水机没水了 != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Console.WriteLine(
"饮水机没水了,快来换水"); 
            饮水机没水了();  
//触发这个事件      
        }

    }

}

public class 公司员工
ExpandedBlockStart.gifContractedBlock.gif
{
    
public void 换水()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Console.WriteLine(
"我去换水");
    }

}

public class AppClass
ExpandedBlockStart.gifContractedBlock.gif
{
    
public static void Main()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        饮水机 公司饮水机 
= new 饮水机(); 
        公司员工 我 
= new 公司员工();
        公司饮水机.饮水机没水了 
+= new 饮水机.饮水机没水了委托(我.换水); 
        
for (int i = 0; i < 10; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            公司饮水机.出水(
1); 
            Thread.Sleep(
500);
        }
 
        Console.Read();
    }

}

 

转载于:https://www.cnblogs.com/vipcjob/archive/2009/11/05/1558222.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值