事件編程
㈠ 什麼是事件驅動編程機制
事件驅動編程機制為需要處理的事件編寫相應的事件處理程序
要理解事件驅動和程序,就需要與非事件驅動的程序進行比較。
實際上,現代的程序大多是事件驅動的,比如多線程的程序,肯定是事件驅動的。
早期則存在許多非事件驅動的程序,這樣的程序,在需要等待某個條件觸發時,會不斷地檢查這個條件,直到條件滿足,這是很浪費cpu時間的。
而事件驅動的程序,則有機會釋放cpu從而進入睡眠態(注意是有機會,當然程序也可自行決定不釋放cpu),當事件觸發時被操作系統喚醒,這樣就能更加有效地使用cpu。
(1)事件編程擴展閱讀:
為需要處理的事件編寫相應的事件處理程序。代碼在事件發生時執行。
delphi和java編程特點
n事件(event)表示程序某件事發生的信號,事件分為:
o外部事件:由外部用戶動作產生的事件。例如,點擊滑鼠、按鍵盤。
o內部事件:由系統內部產生的事件。例如,定時器事件。
n源對象(source object)是產生事件的對象。
㈡ 網頁事件類型及其作用並試舉一例如何對網頁事件編程。
網頁事件用於響應用戶所做的動作。例如用戶單擊某個按鈕,用戶關閉某個窗口等。
如要對網頁事件編程,最簡單的方法是藉助腳本框架,如jquery或JSer.
例如以下示例性的代碼,用於指定在網頁載入完成時彈出一個alert提示。:
JSer.exec(function(){
alert("網頁載入完成。");
});
㈢ 編程 關於事件
1.定義激發事件的對象.
2 處理對象事件的對象
3.定義委託。
以下內容是Copy的、
作者:TomMax (笑望人生) 出處:csdn
主 題: 「.net百題問答的活動」--許多人問過的--《 C#委託及事件 》
所屬論壇: .NET技術 C#
有許多人問的,.Net中的委託以及事件處理。我拿簡單的例子說明一下,是現實中的例子:
比如說一個公司(場景),你是老闆,手下有兩個員工,小張和小王。
你命令小王,如果小張玩游戲,則小王扣去小張500元錢。
這就是現實中的委託。
實際上,在寫程序中,程序員就是老闆,小張和小王就是兩個對象。小張玩游戲是一個方法,小張還有一個游戲事件,他玩游戲激發這個事件。而小王就是事件處理對象,他負責把小張的錢扣除500。
所以,委託有如下幾個要素:
1 激發事件的對象--就是小張
2 處理對象事件的對象--就是小王
3 定義委託,就是你讓小王監視小張。
如果這三個要素都滿足的話,則你就寫出了一個完整事件的處理。
下面有個例子:在vs.net2003 C#控制台應用程序編輯運行成功:
using System;
namespace CSharpConsole
{
public class 場景
{
[STAThread]
public static void Main(string[] args)
{
Console.WriteLine("場景開始了....");
// 生成小王
小王 w = new 小王();
// 生成小賬
小張 z = new 小張();
// 指定監視
z.PlayGame += new PlayGameHandler(w.扣錢);
// 開始玩游戲
z.玩游戲();
console.writeline("場景結束...");
Console.ReadLine();
}
}
// 負責扣錢的人
public class 小王
{
public 小王()
{
Console.WriteLine("生成小王...");
}
public void 扣錢(object sender, EventArgs e)
{
Console.WriteLine("小王:好小子,上班時間膽敢玩游戲...");
Console.WriteLine("小王:看看你小子有多少錢...");
小張 f = (小張)sender;
Console.WriteLine("小張的錢: " + f.錢.ToString());
Console.WriteLine("開始扣錢......");
System.Threading.Thread.Sleep(500);
f.錢 = f.錢 - 500;
Console.WriteLine("扣完了....現在小張還剩下:" + f.錢.ToString());
}
}
// 如果玩游戲,則引發事件
public class 小張
{
// 先定義一個事件,這個事件表示「小張」在玩游戲。
public event PlayGameHandler PlayGame;
// 保存小張錢的變數
private int m_Money;
public 小張()
{
Console.WriteLine("生成小張....");
m_Money = 1000; // 構造函數,初始化小張的錢。
}
public int 錢 // 此屬性可以操作小張的錢。
{
get
{
return m_Money;
}
set
{
m_Money = value;
}
}
public void 玩游戲()
{
Console.WriteLine("小張開始玩游戲了.....");
Console.WriteLine("小張:CS好玩,哈哈哈! 我玩.....");
System.Threading.Thread.Sleep(500);
System.EventArgs e = new EventArgs();
OnPlayGame(e);
}
protected virtual void OnPlayGame(EventArgs e)
{
if (PlayGame != null)
{
PlayGame(this, e);
}
}
}
// 定義委託處理程序
public delegate void PlayGameHandler(object sender, System.EventArgs e);
}
㈣ 編程語言中事件的概念是什麼
編程中的事件,是個抽象的概念,有點像英語老師說的 something。
以下節選自網路 「事件驅動」詞條
計算機領域的事件驅動
所謂事件驅動,簡單地說就是你點什麼按鈕(即產生什麼事件),電腦執行什麼操作(即調用什麼函數).當然事件不僅限於用戶的操作. 事件驅動的核心自然是事件。從事件角度說,事件驅動程序的基本結構是由一個事件收集器、一個事件發送器和一個事件處理器組成。事件收集器專門負責收集所有事件,包括來自用戶的(如滑鼠、鍵盤事件等)、來自硬體的(如時鍾事件等)和來自軟體的(如操作系統、應用程序本身等)。事件發送器負責將收集器收集到的事件分發到目標對象中。事件處理器做具體的事件響應工作,它往往要到實現階段才完全確定,因而需要運用虛函數機制(函數名往往取為類似於HandleMsg的一個名字)。對於框架的使用者來說,他們唯一能夠看到的是事件處理器。這也是他們所關心的內容。
㈤ vb怎樣理解事件驅動編程
對於某個對象而言,事件(event)就是發生在該對象上的事情,通常這是由用戶在對象上激發的一種動作。在VB中,系統為每個對象預先定義好了一些列的事件。事件即控制項對外部條件的反應,不同的控制項具有不用的事件。如:通常情況下命令按鈕就是用來單擊。
一個事件的發生,可引起或驅動相應的事件處理過程的執行,即事件驅動!如果我們使用控制項的相應事件,就必須對其相應的事件進行編寫代碼,否則控制項什麼事情也不會做。
㈥ VB中在代碼窗口中如何選擇相應的對象,事件進行編程
先到界面編輯窗口,然後選中控制項,在property界面中,選擇event就可以針對事件編程了
㈦ 如何利用javascript進行事件編程
1、給想要做效果的html標簽加id或者class
2、利用id或者class做事件綁定
3、利用綁定的事件達到你想要的目的
例:
<div class="demo">點擊我試試</div>
$(".demo" ).click(function(){
$(this).hide();
});
這是一個jQuery做的案例,首先你要引用jQuery文件,然後達到的效果是,點擊class=demo,自身就會消失不見!
㈧ C#中的事件 怎麼回事
事件(event),這個詞兒對於初學者來說,往往總是顯得有些神秘,不易弄懂。而這些東西卻往往又是編程中常用且非常重要的東西。大家都知道windows消息處理機制的重要,其實C#事件就是基於windows消息處理機制的,只是封裝的更好,讓開發者無須知道底層的消息處理機制,就可以開發出強大的基於事件的應用程序來。
先來看看事件編程有哪些好處。
在以往我們編寫這類程序中,往往採用等待機制,為了等待某件事情的發生,需要不斷地檢測某些判斷變數,而引入事件編程後,大大簡化了這種過程:
- 使用事件,可以很方便地確定程序執行順序。
- 當事件驅動程序等待事件時,它不佔用很多資源。事件驅動程序與過程式程序最大的不同就在於,程序不再不停地檢查輸入設備,而是呆著不動,等待消息的到來,每個輸入的消息會被排進隊列,等待程序處理它。如果沒有消息在等待,則程序會把控制交回給操作系統,以運行其他程序。
- 事件簡化了編程。操作系統只是簡單地將消息傳送給對象,由對象的事件驅動程序確定事件的處理方法。操作系統不必知道程序的內部工作機制,只是需要知道如何與對象進行對話,也就是如何傳遞消息。
有了這么多好處,看來我們的確有必要掌握它。俗話說:「難了不會,會了不難」。就讓我們一步一步開始吧...
要講事件,必然要講到委託(delegate)。它們之間的關系可以通過一個淺顯的比方來說明,這個比方可能不是十分恰當。比如你要租一個房屋,這是一個事件,那麼委託就是房屋租賃中介,當你把租房子的消息告知中介後,中介就會產生出一套符合你要求的房屋租賃方案來。再由中介執行這套方案,你便租得了這個房屋,即事件被處理了。當然你也可以不通過中介,直接找房東,但如果沒有互聯網等工具,你如何得到誰出租房屋的信息?話題扯遠了。
委託(delegate)
委託可以理解成為函數指針,不同的是委託是面向對象,而且是類型安全的。關於委託的理解,可以參考我的另一篇文章《C#委託之個人理解》。
事件(event)
我們可以把事件編程簡單地分成兩個部分:事件發生的類(書面上叫事件發生器)和事件接收處理的類。事件發生的類就是說在這個類中觸發了一個事件,但這個類並不知道哪個個對象或方法將會加收到並處理它觸發的事件。所需要的是在發送方和接收方之間存在一個媒介。這個媒介在.NET Framework中就是委託(delegate)。在事件接收處理的類中,我們需要有一個處理事件的方法。好了,我們就按照這個順序來實現一個捕獲鍵盤按鍵的程序,來一步一步說明如何編寫事件應用程序。
1、首先創建一個自己的EventArgs類。
引自MSDN:
EventArgs是包含事件數據的類的基類,此類不包含事件數據,在事件引發時不向事件處理程序傳遞狀態信息的事件會使用此類。如果事件處理程序需要狀態信息,則應用程序必須從此類派生一個類來保存數據。
因為在我們鍵盤按鍵事件中要包含按鍵信息,所以要派生一個KeyEventArgs類,來保存按鍵信息,好讓後面知道按了哪個鍵。
internal class KeyEventArgs : EventArgs
{
private char keyChar;
public KeyEventArgs( char keyChar ) : base()
{
this.keyChar = keyChar;
}
public char KeyChar
{
get
{
return keyChar;
}
}
}
2、再創建一個事件發生的類KeyInputMonitor,這個類用於監控鍵盤按鍵的輸入並觸發一個事件:
internal class KeyInputMonitor
{
// 創建一個委託,返回類型為void,兩個參數
public delegate void KeyDown( object sender, KeyEventArgs e );
// 將創建的委託和特定事件關聯,在這里特定的事件為OnKeyDown
public event KeyDown OnKeyDown;
public void Run()
{
bool finished = false;
do
{
Console.WriteLine( "Input a char" );
string response = Console.ReadLine();
char responseChar = ( response == "" ) ? ' ' : char.ToUpper( response[0] );
switch( responseChar )
{
case 'X':
finished = true;
break;
default:
// 得到按鍵信息的參數
KeyEventArgs keyEventArgs = new KeyEventArgs( responseChar );
// 觸發事件
OnKeyDown( this, keyEventArgs );
break;
}
}while( !finished );
}
}
這里注意OnKeyDown( this, KeyEventArgs );一句,這就是觸發事件的語句,並將事件交由KeyDown這個委託來處理,委託指定事件處理方法去處理事件,這就是事件接收方的類的事情了。參數this是指觸發事件的對象就是本身這個對象,keyEventArgs包含了按鍵信息。
3、最後創建一個事件接收方的類,這個類先產生一個委託實例,再把這個委託實例添加到產生事件對象的事件列表中去,這個過程又叫訂閱事件。然後提供一個方法回顯按鍵信息。
internal class EventReceiver
{
public EventReceiver( KeyInputMonitor monitor )
{
// 產生一個委託實例並添加到KeyInputMonitor產生的事件列表中
monitor.OnKeyDown += new KeyInputMonitor.KeyDown( this.Echo );
}
private void Echo(object sender, KeyEventArgs e)
{
// 真正的事件處理函數
Console.WriteLine( "Capture key: {0}", e.KeyChar );
}
}
4、看一下如何調用
public class MainEntryPoint
{
public static void Start()
{
// 實例化一個事件發送器
KeyInputMonitor monitor = new KeyInputMonitor();
// 實例化一個事件接收器
EventReceiver eventReceiver = new EventReceiver( monitor );
// 運行
monitor.Run();
}
}
總結:
C#中使用事件需要的步驟:
1.創建一個委託
2.將創建的委託與特定事件關聯(.Net類庫中的很多事件都是已經定製好的,所以他們也就有相應的一個委託,在編寫關聯事件處理程序--也就是當有事件發生時我們要執行的方法的時候我們需要和這個委託有相同的簽名)
3.編寫事件處理程序
4.利用編寫的事件處理程序生成一個委託實例
5.把這個委託實例添加到產生事件對象的事件列表中去,這個過程又叫訂閱事件
C#中事件產生和實現的流程:
1.定義A為產生事件的實例,a為A產生的一個事件
2.定義B為接收事件的實例,b為處理事件的方法
3.A由於用戶(程序編寫者或程序使用者)或者系統產生一個a事件(例如點擊一個Button,產生一個Click事件)
4.A通過事件列表中的委託對象將這個事件通知給B
5.B接到一個事件通知(實際是B.b利用委託來實現事件的接收)
6.調用B.b方法完成事件處理
㈨ 事件驅動編程的一般步驟
為需要處理的事件編寫相應的事件處理程序。代碼在事件發生時執行。
delphi和java編程特點
n事件(event)表示程序某件事發生的信號。事件分為:
o外部事件:由外部用戶動作產生的事件。例如,點擊滑鼠、按鍵盤。
o內部事件:由系統內部產生的事件。例如,定時器事件。
n源對象(source object)是產生事件的對象。
一般步驟
編輯
1、確定響應事件的元素
2、為指定元素確定需要響應的事件類型
3、為指定元素的指定事件編寫相應的事件處理程序
4、將事件處理程序綁定到指定元素的指定事件
事件類
每個事件對象包含與該事件相關的屬性。getSource()方法可以獲取事件的源對象。