日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
描述C#事件處理程序

C#事件處理程序

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)多倫,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220

我們可以把事件編程簡(jiǎn)單地分成兩個(gè)部分:事件發(fā)生的類(書(shū)面上叫事件發(fā)生器)和事件接收處理的類。事件發(fā)生的類就是說(shuō)在這個(gè)類中觸發(fā)了一個(gè)事件,但這個(gè)類并不知道哪個(gè)個(gè)對(duì)象或方法將會(huì)加收到并處理它觸發(fā)的事件。所需要的是在發(fā)送方和接收方之間存在一個(gè)媒介。這個(gè)媒介在.NET Framework中就是委托(delegate)。在事件接收處理的類中,我們需要有一個(gè)處理事件的方法。好了,我們就按照這個(gè)順序來(lái)實(shí)現(xiàn)一個(gè)捕獲鍵盤(pán)按鍵的程序,來(lái)一步一步說(shuō)明如何編寫(xiě)事件應(yīng)用程序。

1、首先創(chuàng)建一個(gè)自己的EventArgs類。
引自MSDN:
EventArgs是包含事件數(shù)據(jù)的類的基類,此類不包含事件數(shù)據(jù),在事件引發(fā)時(shí)不向C#事件處理程序傳遞狀態(tài)信息的事件會(huì)使用此類。如果C#事件處理程序需要狀態(tài)信息,則應(yīng)用程序必須從此類派生一個(gè)類來(lái)保存數(shù)據(jù)。
因?yàn)樵谖覀冩I盤(pán)按鍵事件中要包含按鍵信息,所以要派生一個(gè)KeyEventArgs類,來(lái)保存按鍵信息,好讓后面知道按了哪個(gè)鍵。

 
 
 
  1. internalclassKeyEventArgs:EventArgs
  2. {
  3. privatecharkeyChar;
  4. publicKeyEventArgs(charkeyChar):base()
  5. {
  6. this.keyChar=keyChar;
  7. }
  8. publiccharKeyChar
  9. {
  10. get
  11. {
  12. returnkeyChar;
  13. }
  14. }
  15. }

2、再創(chuàng)建一個(gè)事件發(fā)生的類KeyInputMonitor,這個(gè)類用于監(jiān)控鍵盤(pán)按鍵的輸入并觸發(fā)一個(gè)事件:

 
 
 
  1. internalclassKeyInputMonitor
  2. {
  3. //創(chuàng)建一個(gè)委托,返回類型為void,兩個(gè)參數(shù)
  4. publicdelegatevoidKeyDown(objectsender,KeyEventArgse);
  5. //將創(chuàng)建的委托和特定事件關(guān)聯(lián),在這里特定的事件為OnKeyDown
  6. publiceventKeyDownOnKeyDown;
  7. publicvoidRun()
  8. {
  9. boolfinished=false;
  10. do
  11. {
  12. Console.WriteLine("Inputachar");
  13. stringresponse=Console.ReadLine();
  14. charresponseChar=(response=="")?'':char.ToUpper(response[0]);
  15. switch(responseChar)
  16. {
  17. case'X':
  18. finished=true;
  19. break;
  20. default:
  21. //得到按鍵信息的參數(shù)
  22. KeyEventArgskeyEventArgs=newKeyEventArgs(responseChar);
  23. //觸發(fā)事件
  24. OnKeyDown(this,keyEventArgs);
  25. break;
  26. }
  27. }while(!finished);
  28. }
  29. }

這里注意OnKeyDown( this, KeyEventArgs );一句,這就是觸發(fā)事件的語(yǔ)句,并將事件交由KeyDown這個(gè)委托來(lái)處理,委托指定事件處理方法去處理事件,這就是事件接收方的類的事情了。參數(shù)this是指觸發(fā)事件的對(duì)象就是本身這個(gè)對(duì)象,keyEventArgs包含了按鍵信息。

3、最后創(chuàng)建一個(gè)事件接收方的類

這個(gè)類先產(chǎn)生一個(gè)委托實(shí)例,再把這個(gè)委托實(shí)例添加到產(chǎn)生事件對(duì)象的事件列表中去,這個(gè)過(guò)程又叫訂閱事件。然后提供一個(gè)方法回顯按鍵信息。

 
 
 
  1. internalclassEventReceiver
  2. {
  3. publicEventReceiver(KeyInputMonitormonitor)
  4. {
  5. //產(chǎn)生一個(gè)委托實(shí)例并添加到KeyInputMonitor產(chǎn)生的事件列表中
  6. monitor.OnKeyDown+=newKeyInputMonitor.KeyDown(this.Echo);
  7. }
  8. privatevoidEcho(objectsender,KeyEventArgse)
  9. {
  10. //真正的事件處理函數(shù)
  11. Console.WriteLine("Capturekey:{0}",e.KeyChar);
  12. }
  13. }

4、看一下如何調(diào)用

 
 
 
  1. publicclassMainEntryPoint
  2. {
  3. publicstaticvoidStart()
  4. {
  5. //實(shí)例化一個(gè)事件發(fā)送器
  6. KeyInputMonitormonitor=newKeyInputMonitor();
  7. //實(shí)例化一個(gè)事件接收器
  8. EventReceivereventReceiver=newEventReceiver(monitor);
  9. //運(yùn)行
  10. monitor.Run();
  11. }
  12. }

總結(jié):

C#中使用事件需要的步驟:
1.創(chuàng)建一個(gè)委托
2.將創(chuàng)建的委托與特定事件關(guān)聯(lián)(.Net類庫(kù)中的很多事件都是已經(jīng)定制好的,所以他們也就有相應(yīng)的一個(gè)委托,在編寫(xiě)關(guān)聯(lián)C#事件處理程序--也就是當(dāng)有事件發(fā)生時(shí)我們要執(zhí)行的方法的時(shí)候我們需要和這個(gè)委托有相同的簽名)
3.編寫(xiě)C#事件處理程序
4.利用編寫(xiě)的C#事件處理程序生成一個(gè)委托實(shí)例
5.把這個(gè)委托實(shí)例添加到產(chǎn)生事件對(duì)象的事件列表中去,這個(gè)過(guò)程又叫訂閱事件

C#中事件產(chǎn)生和實(shí)現(xiàn)的流程:
1.定義A為產(chǎn)生事件的實(shí)例,a為A產(chǎn)生的一個(gè)事件
2.定義B為接收事件的實(shí)例,b為處理事件的方法
3.A由于用戶(程序編寫(xiě)者或程序使用者)或者系統(tǒng)產(chǎn)生一個(gè)a事件(例如點(diǎn)擊一個(gè)Button,產(chǎn)生一個(gè)Click事件)
4.A通過(guò)事件列表中的委托對(duì)象將這個(gè)事件通知給B
5.B接到一個(gè)事件通知(實(shí)際是B.b利用委托來(lái)實(shí)現(xiàn)事件的接收)
6.調(diào)用B.b方法完成事件處理


網(wǎng)站名稱:描述C#事件處理程序
文章網(wǎng)址:http://www.5511xx.com/article/dhphjeh.html