C#事件

C#事件

事件是C#语言内置的语法,可以定义和处理事件,为使用组件编程提供了良好的基础。

 
1 事件驱动 

Windows应用程序和dos程序的最大不同是采用事件驱动方式工作,也叫消息驱动。dos程序如要从键盘输入数据,则要独占键盘等待用户输入,如用户不输入,则CPU一直执行键盘输入程序,等待用户输入,即dos程序独占外设和CPU。
    Windows操作系统是一个多任务的操作系统,允许同时运行多个程序,它不允许任何一个程序独占外设,如键盘、鼠标等,所有运行程序共享外设和CPU,各个运行程序都要随时准备从外设接受命令,执行命令。因此必须由Windows操作系统统一管理各种外设。
 
Windows把用户对外设的动作都看作事件(消息),如单击鼠标左键,发送单击鼠标左键事件,用户按下键盘,发送键盘被按下的事件等。Windows操作系统统一负责管理所有的事件,根据具体情况把事件发送到相应运行程序,而各个运行程序自动用一个函数响应事件,这个函数叫事件处理函数。这种方法叫事件驱动。Windows操作系统在window.h文件中预定义了若干事件。在Form类和控件类中都定义了WndProc方法可截获Windows消息,这是一个虚函数。在它们的派生类中可重写WndProc方法,截获Windows消息,见下例,方法中Message是一个结构,m.Msg为事件编号,m.Wparam和m.LParam是事件的附加信息,事件不同,意义也不同。

protected override void WndProc(ref Message m)     
{ base.WndProc(ref m);//调用基类事件处理函数
 if(m.Msg==0x0112&&(int)m.WParam==0xf060) {…}    //自定义处理事件代码
}


2 事件的声明

using System;
public delegate void ChangedEvent(object sender, EventArgs e); //代表类声明
public class Person
{   public event ChangedEvent Changed;//声明事件
    private string P_name = "张三";//P_name是私有字段
    public string Name       //定义属性Name
    {   get{ return P_name;                }
        set{ P_name = value; //修改了属性Name
              OnChanged(EventArgs.Empty);   }
    }//希望属性Name被改变后,发出Changed事件
public virtual void OnChanged(EventArgs e)
 {   if (Changed != null)//如果Changed代表了事件处理函数
        Changed(this, e);//执行Changed代表的函数
 }
}
public class Test
{   public static void Main()
    {…         }    //代码见下节
 static void OnePerson_Changed(object sender, EventArgs e)
 {Console.WriteLine("修改了数据"); }
}
 
using System;
public delegate void ChangedEvent(object sender, EventArgs e); //代表类声明
public class Person
{   public event ChangedEvent Changed;//声明事件
    private string P_name = "张三";//P_name是私有字段
    public string Name       //定义属性Name
    {   get{ return P_name;                }
        set{ P_name = value; //修改了属性Name
              OnChanged(EventArgs.Empty);   }
    }//希望属性Name被改变后,发出Changed事件
  
public static void Main()
{ Person OnePerson=new Person();//生成Person类对象
 //下句令Changed代表程序员编制的事件处理函数OnePerson_Changed OnePerson.Changed +=new ChangedEvent(OnePerson_Changed);
 String s = Console.ReadLine();
 //改变Person类属性值,产生事件,调用事件处理函数
 OnePerson.Name=s;
 Console.ReadLine();//此句等待输入使能看到结果,回车退出
 OnePerson.Changed -= new ChangedEvent(OnePerson_Changed);
}
    运行该程序,输入若干字符后回车,修改Person类属性值,产生事件,调用事件处理函数,在下一行显示:修改了数据。
 (参考资料:《C#应用程序设计教程》人民邮电出版社)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值