程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

C#事件

編輯:.NET實例教程

事件是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("修改了數據"); }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved