国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

事件與事件處理程序

2019-11-14 13:55:38
字體:
來源:轉載
供稿:網友

事件與時間處理程序

事件是可以被控件識別的操作。如按下確定按鈕,選擇某個單選按鈕或者復選框。每一種控件有自己可以識別的事件,如窗體的加載、單擊、雙擊等事件,編輯框(文本框)的文本改變事件,等等。

事件有系統事件和用戶事件。

1.系統事件由系統激發,如時間間隔24小時,銀行儲蓄的存款日期增加一天。

2.用戶事件由用戶激發,如用戶點擊按鈕,在文本框中顯示特定的文本。事件驅動控件執行某項功能。

觸發事件的對象稱為事件發送者;接收事件的對象稱為事件接受者;

事件是用戶對窗口上各種組件的操作。使用事件機制可以實現:當類對象的狀態發生變化時,系統會通過某種途徑調用類中的有關處理這個事件的方法或者觸發控件的事件處理程序等。

在.NET框架中,事件是將事件發送這(觸發事件的對象)與事件接受者(處理事件的方法)相關聯的一種代理類,即事件機制是通過代理類來實現的。當一個事件被觸發時,由該代理來通知(調用)處理事件的相應方法。

C#中事件機制的工作過程如下:

(1)   將實際應用中需要通過事件機制解決的問題對象注冊到相應的事件處理程序上,代表今后當該對象的狀態改變時,該對象有權使用它注冊的事件處理程序。

(2)   當事件發生時,觸發事件的對象就會調用該對象所有已注冊的事件處理程序。

下面就以一個具體的例子來說明事件與事件處理程序:

using System;

namespace Sample

{

    public class PRogram

    {

        //事件處理程序

        private static  double Add(double first, double second)

        {

            return first + second;

        }

 

        static void Main(string[] args)

        {

            Sample sample=new Sample();

            sample.Calculate += new Sample.CalculateHandler(Add);    //添加事件處理程序

            double a = Convert.ToDouble(Console.ReadLine());

            double b = Convert.ToDouble(Console.ReadLine());

            sample.InvokeEvent(a, b);   //觸發事件

            Console.ReadKey();

        }

    }

 

    public class Sample

    {

        public delegate double CalculateHandler(double first, double b);

 

        public event CalculateHandler Calculate;    //事件

 

        public void InvokeEvent(double a,double b)

        {

            Console.WriteLine(Calculate(a, b));

        }

    }

}

 

首先,申明一個類 Sample ,包含成員 CalculateHandler(委托)與Calculate(事件)(在C#中,事件是通過委托定義的,及申明事件,要先確定事件處理程序的函數簽名,然后確定委托類型,在通過委托定義事件。)函數 InvokeEvent()用于激發事件,以執行事件處理程序。在本例中事件只有一個事件處理程序。下面是一個事件訂閱多個事件處理程序的代碼:

using System;

 

namespace Sample

{

    public class Program

    {

 

        //事件處理程序

        private static void Add(double first, double second)

        {

            Console.WriteLine(first + second);

        }

 

        //事件處理程序

        private static void Sub(double first, double second)

        {

            Console.WriteLine(first - second);

        }

 

        //事件處理程序

        private static void Div(double first, double second)

        {

            Console.WriteLine(first / second);

        }

 

        //事件處理程序

        private static void Mul(double first, double second)

        {

            Console.WriteLine(first * second);

        }

 

        static void Main(string[] args)

        {

            Sample sample=new Sample();

            sample.Calculate += new Sample.CalculateHandler(Add);    //添加事件處理程序

            sample.Calculate += new Sample.CalculateHandler(Sub);    //添加事件處理程序

            sample.Calculate += new Sample.CalculateHandler(Mul);    //添加事件處理程序

            sample.Calculate += new Sample.CalculateHandler(Div);    //添加事件處理程序

            double a = Convert.ToDouble(Console.ReadLine());

            double b = Convert.ToDouble(Console.ReadLine());

            sample.InvokeEvent(a, b);   //觸發事件

            Console.ReadKey();

        }

    }

 

    public class Sample

    {

        public delegate void CalculateHandler(double first, double b);

 

        public event CalculateHandler Calculate;

 

        public void InvokeEvent(double a,double b)

        {

            Calculate.Invoke(a, b);

        }

    }

}

在這個例子中 Calculate 事件訂閱了四個事件(加,減,乘,除),在觸發 Calculate 事件后,按順序依次執行四個事件處理程序。

事件與事件處理程序是不同的概念,只有當事件先訂閱(添加)事件處理程序后,在觸發事件時,事件才會依次(按訂閱的先后)處理所有訂閱的事件處理程序。所以我們在寫程序時所說的事件通常指的是事件處理程序(即我們習慣將所寫的事件處理程序添加到事件上的過程叫做事件),但在自定義事件中,事件就是指的事件,應當正確的理解這兩者的區別。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海城市| 凤冈县| 淳安县| 灵寿县| 文成县| 扶风县| 扬中市| 天峻县| 宝坻区| 莎车县| 鄂温| 东乡| 本溪| 湟中县| 蓬安县| 开原市| 昔阳县| 东乌珠穆沁旗| 临沂市| 遂平县| 安康市| 涟水县| 东光县| 伊宁市| 克拉玛依市| 东明县| 建瓯市| 嘉荫县| 漳平市| 双峰县| 麻阳| 皮山县| 思南县| 枣庄市| 衡水市| 社旗县| 南澳县| 平安县| 汝阳县| 平远县| 琼中|