今天我又學了一招簡單而又實用的招式,名為----事件呼叫事件。
比如說你有一個按鈕事件1,但是在按鈕事件2中需要有按鈕事件1的動作。這就是事件的調用,跟方法的調用是同一個意思。
protected void Button1_Click(object sender, EventArgs e)<br /> {<br /> this.Label1.Text = this.TextBox1.Text;<br /> }<br /> protected void Button2_Click(object sender, EventArgs e)<br /> {<br /> this.Label2.Text = this.TextBox1.Text;<br /> Button1_Click(null, null);<br /> }
從代碼當中可以看到Button1的點擊事件是使Label1獲得TextBox1的值,而Button2的點擊事件是使Label2獲得TextBox2的值並調用Button1的事件了。也就是說Button2事件裡面有一部分是執行了Button1的事件。
這裡還有一點需要注意,那就是如果事件是同一類型的話,那你還可以把它當成是方法的調用一樣來使用。(都是按鈕的點擊事件)
protected void Button2_Click(object sender, EventArgs e)<br /> {<br /> this.Label2.Text = this.TextBox1.Text;<br /> Button1_Click(sender, e);<br /> }
可能大家已經關注到事件裡面的兩個參數,我呀,也不多說,用別人的精華內容來說明吧。大家慢慢體會其中的意思,或者可以去下面的連結去更發現更實在的知識。
Object sender
sender是事件來源(被監視的對象,也叫監視對象,事件觸發者,本例為熱水器,水溫達到95℃以上觸發事件),表示觸發此事件的對象
//比如說你按下按鈕,那麼sender就是按鈕,觸發已經預定好的事件處理代碼,比如Onclik
EventArgs e
e是事件參數(***EventArgs類對象,根據事件的不同事件參數類型可能不同,但必須繼承EventArgs類,比如本例中的 public class BoiledEventArgs : EventArgs ,又根據net的編碼規範"繼承自EventArgs的類型應該以EventArgs結尾。",所以名稱為***EventArgs),包含跟該事件相關的資訊,比如參數。這要你自己手動去寫代碼(已經寫好封裝了的可以直接拿來用,但如果這樣,那麼它的名字不再是EventArgs了,而是以EventArgs結尾的一個名稱。根據.net編碼規範,如果一個函數頭中直接使用的是EventArgs,那麼代表它不需要使用e來傳遞特殊參數,你可以在VS中看看EventArgs的定義,看看它都包括了什麼內容),它用來輔助你處理事件。還可以傳遞引用,在方法中直接存取類的成員等。
本例中包含參數temperature。
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int temperature)
{
this.temperature = temperature;
}
}
//假如"用滑鼠點擊表單"這個事件發生,那麼e會包含點擊的位置等等
歸根究底,這個sender和e及其一整套的處理方式,只不過是windows訊息機制的另外一種表現罷了!
(摘至:
上面內容的連結為
http://hi.baidu.com/%C9%FA%B4%E6%B5%C4%D7%CA%B1%BE/blog/item/c06f64d1d72e17309b5027f6.html)