C#窗口事件处理初探

来源:互联网 发布:网络语吃糠是什么意思 编辑:程序博客网 时间:2024/04/30 20:13

事件驱动(Event Driven)是C#窗口程序设计的核心,其重要性就相当于VC中的消息映射,不了解事件驱动就无法深入窗口程序设计的殿堂。在C#语言中,事件的处理主要有两种方法:委托式的事件处理模式(Delegation Event Model)与对可重载方法(Event Method)的重载。

1、委托式事件处理

       委托式事件处理模式,顾名思义,就是将特定的事件委托给负责事件处理的方法来进行。

       .NET中,类有数据成员(Data Member)与函数成员(Function Member)。此外还有 “事件成员(Event Member)”,来进行事件驱动的处理。

       事件成员就是那些与该类的对象相关的事件。它定义了在一个对象中会有哪些相关的事件发生。不同的类可以有不同的事件成员。

       事件处理可通过委托关系来进行。委托关系可以这样来建立:

       object.Event+=new EventHandle(Method);

       其含义是:如果对象object发生了Event事件,就交由方法Method来处理。一个对象可以委托多个不同的处理,“+=”用来增加新的委托关系。Method是真正进行事件处理的地方,格式为:

       public void Method(object sender,EventArgs e);

       EventArgs.NET Framework中有关事件的基础类,所有发生的事件都被包装成EventArgs类或其子类的对象。当事件发生时,Method会收到这两个参数。一旦建立了委托关系,系统自动在特定事件发生时,转而执行您所委托的事件处理方法。

下面举一个简单的例子,运行时首先产生一个窗口,当点击窗口上的按钮时,程序结束。代码如下:

using System;

using System.Windows.Forms;

 

class Form1:Form

{

     public static void Main()

     {

         Application.Run(new Form1());

     }

    

     public Form1():base()

     {

         Text="事件处理示例";

         Button button1=new Button();

         button1.Text="点击";

         //将button1的Click事件委托给countClick方法

         button1.Click+=new EventHandler(this.countClick);

         //将button1加到窗口中。

         Controls.Add(button1);

     }

 

     public void countClick(object sender,EventArgs e)

     {

         Application.Exit();

     }

}

2、重载事件方法

       C#中,针对不同类所相关的事件,除了定义有事件成员外,也定义了可重载的事件方法,可通过重载这些事件方法来设计你所希望的对应事件处理。这些可重载的事件方法名称皆以“On”开头,且被声明为“virtual”,一个被声明成virtual的方法,就代表它可被重载,被声明成override的方法也代表它可被重载,如果声明成abstract则必须被重载。例如按钮的Click事件,就有一个对应的可重载的OnClick事件方法。

       仍然以上面的例子来说,代码如下:

using System;

using System.Windows.Forms;

 

class Button1:Button

{

     public static void Main()

     {

         Form form1=new Form();

         form1.Text="事件处理示例";

         Button1 button1=new Button1();

         button1.Text="点击";

         form1.Controls.Add(button1);

         Application.Run(form1);

     }

 

     protected override void OnClick(EventArgs e)

     {

         Application.Exit();

     }

}

     通过以上的例子看出,在C#中进行事件处理是相当简便的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烧纸火纸迷信纸利润太低怎么办 刚买的绣球花花有点蔫怎么办 ZF葡7正常佩戴动能太满怎么办 怀孕初期老婆婆做的菜不好吃怎么办 调节协议已签字不签收调解书怎么办 给晋中苗圃拉了树苗没拿上钱怎么办 多肉旁边长出好多小株怎么办 烤瓷牙制备时颌关系不够怎么办 对门放石头正对我家大门怎么办 合租的室友关门开门特别大声怎么办 三周岁的宝宝小阴唇再次粘连怎么办 小阴唇内侧长了毛囊炎很大疼怎么办 小阴唇上一个黄豆大的硬疙瘩怎么办 梦幻西游手游金币兑换上限了怎么办 手机放裤子口袋里易拔出怎么办 两个月宝宝拉肚子怎么办吃纯母乳 花王泡沫染停留时间太久怎么办 ps右下角的图层图标隐藏了怎么办 压缩包文件太大微信无法传送怎么办 一寸照片的尺寸在ps中怎么办 遇到尖酸刻薄爱数落人的领导怎么办 初中一年级的学生就不想读书怎么办 电脑上所有文件都变得很大怎么办 小孩子手被门缝夹肿了怎么办 阳台挂衣服的单杆掉下来了怎么办 九个月婴儿受凉声音变沙哑怎么办 以汉字为主题的手抄报怎么办 用惯了笔画打字打不来拼音怎么办 老条石头给淤泥弄黑怎么办 新买的沙发垫子味很大怎么办 电脑表格中删去多余框线怎么办 农村教学点招不到学生老师怎么办 wps卡死了打的东西没保存怎么办 华为手机浏览器边框颜色变了怎么办 打印机打出来的字两边少怎么办 wps表格分页时表格断了怎么办 word里的表格一页放不下怎么办 表格上红色的字不能删除怎么办 渐变区的选择框变得很大怎么办 用乐秀编辑短片后两边有边框怎么办 安卓手机相机图标没有了怎么办