ASP.NET溫故而知新學習系列之委託與事件—伺服器端事件(二)

來源:互聯網
上載者:User

  閱讀目錄

  一:ASP.NET視窗事件處理

  二:委託式的事件處理模式

  三:重載式的事件處理模式

  一:ASP.NET視窗事件處理

  . 事件驅動是視窗程序設計的核心,不瞭解事件驅動就無法進入視窗程序設計的殿堂

  . Windows中的事件和ASP.NET中的事件的區別是什嗎?

  在Windows中我們的機器是單一的,我們的機器即是伺服器也是用戶端就是一台機器,在Windows中你點擊了按鈕就是伺服器當中的按鈕,所以正兒八經的就是面向事件的編程,而在ASP.NET中,你點擊的是用戶端的按鈕,執行的確實伺服器端的事件,雖然它們是伺服器控制項最終會在瀏覽器中呈現出來,所以對於一千個人,一萬個人看到的是同一個控制項,這麼多人點擊了按鈕,實際上通過用戶端來點擊的,最後執行的是伺服器端的事件,看似好像是點擊伺服器端的按鈕,這實際上是有一個類比的過程,是通過javascript的一個函數類比伺服器端的事件

  . 在C#主要有兩種事件處理模式,無論是WindowsAPP還是ASP.NET

  -委託式的事件處理模式

  -重載式的事件處理模式

  二:委託式的事件處理模式
  . 委託式的事件處理模式,就是將特定的事件委託給負責事件處理的方法來進行
  . 在.NET中,類有資料成員(屬性),函數成員(方法),事件成員(事件),事件成員就是那些與該類的對象相關的事件
  . 事件處理可以通過委託關係來進行,委託關係關係這樣來建立object.Event+=new EventHandle(Method);它的含義就是如果對象object發生了Event事件,就交由方法Method來處理,一個對象可以委託多個不同的處理,“+=”用來增加新的委託關係
  . Method是真正進行事件處理的地方,格式為:public void Method(object sender, EventArgs e);object sender指是觸發事件的按鈕,也就是觸發事件的控制項,EventArgs是.NETFramework中有關事件的基礎類,所有發生的事件都被封裝成EventArgs類或者其子類的對象,當事件發生時,Method會收到這兩個參數,一旦建立了委託關係,系統自動的會在特定事件發生時,轉而執行你所委託的事件處理方法

  . 我們看看伺服器端事件背後到底發生了什麼

  1:Default.aspx 設計檔案

  

  2:Default.aspx.cs 代碼檔案

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;

  namespace ServerEvent
  {
      public partial class _Default : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
              this.btnTwo.Click += new EventHandler(this.btnTwo_Click);
          }

          /// <summary>
          ///  設計時添加事件,什麼叫“設計時添加事件”就是我們從工具箱拖一個按鈕,雙擊添加的一個事件
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          protected void btnOne_Click(object sender, EventArgs e)
          {

       //實際上是在背後產生了這樣一段代碼 this.btnOne.Click += new EventHandler(this.btnOne_Click);把Click事件和btnOne_Click事件處理函數關聯起來了
                Response.Write("設計時添加事件");
          }

          /// <summary>
          ///  運行時添加事件,如果你沒有從工具箱拖一個按鈕雙擊添加了一個事件,那麼可以採用運行時添加事件
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          protected void btnTwo_Click(object sender, EventArgs e)
          {
              Response.Write("運行時添加事件");
          }
      }
  }

  三:重載式的事件處理模式
  . 在C#中,針對不同類所相關的事件,除了定義有事件成員外,也定義了可重載的事件方法,可通過重載這些事件方法來設計你所希望的對應事件處理,說白了就是在C#中,好多類都提供了一些可以重載的事件方法,就是它已經定義好了這些事件了,只不過我們需要通過衍生類別中自己重新去定義一下就行了

  . 這些可重載的事件方法名稱皆為“On”開頭,而且被聲明為“virtual”,一個被聲明為“virtual”的方法就代表它可以被重載,被聲明為“onverride”的方法也代表它可以被重載,如果聲明為“abstract”則表示它必須被重載,例如:按鈕的Click事件,就有一個對應的可重載的OnClick事件方法

  . 把按鈕控制項重載了,把它派產生一個類,然後把它需要的方法重載了,自訂控制項的好處就是可以在好多地方使用,這就是代碼的可重複性

  我們可以從”物件瀏覽器“來看Web伺服器控制項有哪些事件方法可以重載

  

  1:MyCustomButtonControl.cs ASP.NET伺服器控制項類

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Linq;
  using System.Text;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;

  namespace ServerControl
  {
      [DefaultProperty("Text")]
      [ToolboxData("<{0}:MyButton runat=server></{0}:MyButton>")]
      //“MyButton”指的是我的自訂按鈕控制項,從“Button”派生一個我自訂的Button
      public class MyButton : System.Web.UI.WebControls.Button
      {
          [Bindable(true)]
          [Category("Appearance")]
          [DefaultValue("")]
          [Localizable(true)]
          public new string Text
          {
              get
              {
                  String s = (String)ViewState["Text"];
                  return ((s == null) ? "[" + this.ID + "]" : s);
              }

              set
              {
                  ViewState["Text"] = value;
              }
          }

          protected override void OnClick(EventArgs e)
          {
              this.Page.Response.Write("重載式的事件處理模式");
          }

          protected override void RenderContents(HtmlTextWriter output)
          {
              output.Write(Text);
          }
      }
  }

  2:添加我們自訂的Button控制項

    在工具箱選擇“選擇項”,然後選擇我們MyCustomButtonControl.cs編譯好的dll就行了

    

  3:Default.aspx 設計檔案

  拖動“MyButton”到我們的頁面

  

  

  

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.