动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   网页设计 → 阅读文章

 C#事件机制归纳(下)

作者:无从考证 来源:CSDN 
阅读 数 552 人次 , 2006-2-15 14:35:00 

  3.C#中预定义事件处理方式
    学习事件,我觉得最不好理解的就是C#中预定义了事件,使我才开始学习事件时一头雾水。在查了些资料后,终于弄明白了一些,如下:
EventArgs是包含事件数据的类的基类,用于传递事件的细节。
EventHandler是一个委托声明如下(其在.Net类库中如下声明的)
public delegate void EventHandler( object sender , EventArgs e ) 所以,所有形如: 
void 函娄名(object 参数名,EventArgs 参数名);
的函数都可以作为Control类的Click事件响应方法了。如下面所定义的一个事件响应方法:
private void button1_Click(object sender, System.EventArgs e)
参数object sender表示引发事件的对象,(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1)System.EventArgs e 代表事件的相应信息,如鼠标的x,y值等。
下面我们研究一下Button类看看其中的事件声明,以Click事件为例。
public event EventHandler Click;
这里定义了一个EventHandler类型的事件Click
private void button1_Click(object sender, System.EventArgs e)
         {
                   ...
             }
这是我们和button1_click事件所对应的方法。注意方法的参数符合委托中的签名(既参数列表)。那我们怎么把这个方法和事件联系起来呢,请看下面的代码。
this.button1.Click += new System.EventHandler(this.button1_Click); (其实button1.Click 为System.EventHandler委派的实例事件。与委派中委派实例委托给某一方法非常相似)
把this.button1_Click方法绑定到this.button1.Click事件。
 
 
4.事件的参数的使用。
using System;
 
class Class1
{
       static void Main()
       {
               Student s1=new Student();
               s1.Name ="Student1";
               Student s2=new Student();
               s2.Name ="Student2";
              s1.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);
               s2.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK);
 
               //当Register方法一执行,触发RegisterOK事件
               //RegisterOK事件一触发,然后执行Student_RegisterOK方法
               s1.Register();  
              s2.Register();
              Console.ReadLine();
       }
       static void Student_RegisterOK(RegisterOkArgs e)
       {
              Console.WriteLine(e.EventInfo);
       }
}
 
class Student
{
       public delegate void DelegateRegisterOkEvent(RegisterOkArgs e);
       public event DelegateRegisterOkEvent RegisterOK;
       public string Name;
       public void Register()
       {
              Console.WriteLine("Register Method");
              RegisterOK(new RegisterOkArgs("Student Name: "+Name));
       }
}
class RegisterOkArgs:EventArgs
{
       public string EventInfo;
       public RegisterOkArgs(string eventInfo):base()
       {
              this.EventInfo =eventInfo;
       }
}   
 本文TagsC#  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:C#事件机制归纳(上)
· 下一篇:提高Java代码可重用性的三个措施
· FrontPage实用小技巧
· 用DW中ToolTip代码改进的提示框
· 重构、标准、布局
· 防止网页内容被拷贝的方法
· Javascript实例教程(16)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077