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

首頁 > 開發 > 綜合 > 正文

C# 事件及響應方法

2024-07-21 02:26:03
字體:
來源:轉載
供稿:網友

  c#語言自c/c++演變而來。它是現代、簡單、完全面向對象和類型安全的。c#語言是微軟公司針對.net平臺才推出來的一門新語言,作為.net平臺的第一語言,它幾乎集中了所有關于軟件開發和軟件工程研究的最新成果。面向對象、類型安全、組件技術、自動內存管理、跨平臺異常處理、版本控制、代碼安全管理……
  在.net應用程序開發中,不管是web forms(asp.net)還是windows forms,都涉及到大量對象的事件響應及處理,比如客戶在線提交一份訂單、或是在windows窗口上移動鼠標等都將有事件發生。那么在c#中,是怎樣聲明事件并為事件添加響應方法的呢?下面的文章對此為大家作了詳細的講述。
  原理簡介
  在c#中,一個類可以有域(fields)、屬性(properties)、方法(methods)、索引(indexs)、事件(events)等成員,其中事件(events)成員就是用來聲明一個類事件的。在類中聲明一個事件成員一般采用如下的語法形式:
  public event 代表名 事件名。
  如在control類中聲明了一個click事件成員,其語法如下:
  
  public event eventhandler click;
  
  在c#中,增加了一個新的數據類型delegate(代表)來解決事件處理問題。代表數據類型非常類似于c語言中的指針,其與指針不同的是,其是代碼是安全的,可管理的。由于c#本身的簡易性,對于沒有使用過c及指針的程序來說,理解delegate也是非常容易的。
  在c#中,通過使用delegate,你可以通過“+=”(加等于)操作符非常容易地為.net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的“-=”(減等于)操作符取消這些響應方法。如下面為temp按鈕添加click事件的語句:
  
  temp.click+=new system.eventhandler(this.test);//為test添加事件處理方法
  
  在上面聲明事件的語句中,eventhandler是一個delegate(代表)類型,其在.net類庫中如下聲明的:
  
  public delegate void eventhandler(object sender,eventargs e);
  
  這樣,所有形如:void 函婁名(object 參數名,eventargs 參數名);的函數都可以作為control類的click事件響應方法了。如下面所定義的一個事件響應方法:
  
  private void button1_click(object sender, system.eventargs e)
  
  由于是通過delegate(代表類型)來處理事件,因此,可能通過累加使一個事件具有多個響應方法;與此同時,還可以使一個方法作為多個事件的響應方法。(注意:在c#語言類中的event成員后面只能出現“+=”與“-=”兩個表示添加與取消事件響應函數的操作符。)
  不管是asp.net還是一般的windows forms 編程,在c#中,基本上我們遇到的事件響應方法都是說明成如下的形式:
  
  private void button1_click(object sender, system.eventargs e)
  
  那么,一個事件響應方法的存取權限、返回值類型、參數及類型甚至方法名稱等是否都必須固定不變呢?答案是:不是!
  一般情況下,事件的響應方法中都有兩個參數,其中一個代表引發事件的對象即sender,由于引發事件的對象不可預知的,因此我們把其聲明成為object類型,所有的對象都適用。第二個參數代表引發事件的具體信息,各種類型的事件中可能不同,這要根據類中事件成員的說明決定。
  我們知道,事件是通過delegate(代表) 來處理的。假設將要表示事件的代表說明成如下形式:
  
  delegate int myeventhandler(object sender, toolbarbuttonclickeventargs e);
  
  則當涉及上面的事件響應函數聲明時,就須要聲明成如下的形式:
  
  private int mytest(object sender,toolbarbuttonclickeventargs e)
  {
  }
  
  在給對象添加事件響應方法時就可以用如下的代碼實現:
  
  control.event+=new myeventhandler(mytest);
  
  示例程序
  下面,我們用visual studio .net開發工具設計了一個簡單windows forms的程序,向大家展示了c#中具體是怎樣實現事件響應處理的。
  * 主要類
  system.windows.forms.application類:應用程序類。
  system.windows.forms.form類:窗體類。
  system.windows.forms.label類:文字標簽類,主要用于在窗口上添加標簽信息。
  system.windows.forms.button類:按鈕類,生成一個命令按。
  system.eventhandler delegate(代表):其是.net類庫中的一個公用代表類型,主要用于說明并初始化一個事件方法,該代表具有兩個參數object sender表示引發事件的對象,system.eventargs e 代表事件的相應信息,如鼠標的x,y值等。
  * 設計簡介
  在visual studio .net選擇新建windows 應用程序,選擇程序地址并輸入程序名后,將生成一個非常簡單的初始化窗體form1類;在初始窗體中添加一個標簽(label)及一個按鈕(button)并設置相應的位置大小及屬性值等。雙擊按鈕進入代碼編輯區,此時系統自動生了一個用于處理按鈕click事件的方法,即button1_click()。在方法中添如下的代碼:
  
  button temp=new button();
  temp.text="新增加的按鈕";
  temp.location=new point(30,80);
  temp.click+=new eventhandler(this.test);
  this.controls.add(temp);
  label1.click+=new eventhandler(this.test);
  
  完成后,為窗體form1類添加一個響應事件的方法test(),如下:
  
  private void test(object sender,system.eventargs e)
  {
  messagebox.show("這是我自定義的事件響應函數!","提示信息");
  }
  
  完成代碼后保存,編譯運行即可以看程序中各控件的事件響應情況.
  * 運行效果
  程序運行開始時有一個標簽及一個按鈕,此時點擊標簽沒有任何響應信息,然后點擊“為控件添加事件”按鈕,將在窗體中增加一個顯示為“新增加的按鈕”的按鈕,此時再點擊標簽將會看到有響應信息,即彈出一個對話框說明事作已經得到處理。點擊一下“新增加的按鈕”也將看到有事件響應信息。
  再點擊“為事件添加按鈕”此時添體界面看到不變,其實已經有兩個顯示為“新增加的按鈕”的按鈕在窗體上,只是因為重復顯示在同一位置看不到而已。非常有趣的是,再點擊標簽試一下,我們會發現事件響應方法被執行了兩次。如下圖所示:
  
  
  * 關鍵代碼及注釋
  下面我們列出了本程序中比較核心的代碼,并作了詳細的注釋,請大家仔細體會。
  private void initializecomponent()//窗體構造函數調用的窗體初始化函數,主要由visual studio .net自動生成。
  {
  this.button1.click += new system.eventhandler(this.button1_click); //為button1對象的click事件添加響應方法button1_click() 。
  }
  
  private void button1_click(object sender, system.eventargs e)//系統生成的button1按鈕的click事件響應方法。
  {
  button temp=new button();//生成一個button 對象
  temp.text="新增加的按鈕";//設置button對象的外觀屬性
  temp.location=new point(30,80);
  temp.click+=new eventhandler(this.test);//把test()添加新增按鈕click事件的響應方法。
  this.controls.add(temp); //把button對象temp添加到當前窗體中
  
  label1.click+=new eventhandler(this.test);//把test()也添加為標簽(label1)click事件的響應方法。注意c#中事件響應可以有多個方法或者是一個方法的重復。
  }
  private void test(object sender,system.eventargs e)//自定義事件處理函數,注意函數的參數類型。
  {
  messagebox.show("這是我自定義的事件響應函數!","提示信息");//彈出一個對話框,顯示提示信息。
  }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 株洲市| 九龙城区| 嘉义市| 安阳县| 鄂温| 防城港市| 新密市| 襄汾县| 宁陵县| 北川| 绵竹市| 尉犁县| 江西省| 甘洛县| 临西县| 延川县| 连山| 安福县| 陆良县| 南部县| 土默特右旗| 奉贤区| 阳原县| 屏南县| 眉山市| 东兴市| 丰原市| 安康市| 廉江市| 德惠市| 秭归县| 富平县| 墨江| 峡江县| 云霄县| 进贤县| 理塘县| 溆浦县| 北宁市| 榆树市|