北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部提供:
擴(kuò)展閱讀:C#委托與事件(一)
二、在窗體中使用委托和事件
在上一篇文章中講解的內(nèi)容并不能體現(xiàn)委托和事件的優(yōu)點(diǎn),其實(shí),委托和事件在C#中使用非常廣泛,例如,當(dāng)我們點(diǎn)擊某個(gè)“按鈕”的時(shí)候,就會(huì)有一個(gè)“Click”事 件觸發(fā),而這個(gè)事件會(huì)通知“委托”,在C#窗體應(yīng)用程序中,“委托”的名字比較規(guī)范,統(tǒng)一使用“EventHandler”,它的具體格式是“void EventHandler(object sender, EventArgs e);”。相信大家都寫(xiě)過(guò)下面這樣子的HelloWorld程序:(北大青鳥(niǎo)學(xué)校,北大青鳥(niǎo)課程)
當(dāng)點(diǎn)擊按鈕的時(shí)候彈出一個(gè)對(duì)話框。我們?cè)鯓訉?shí)現(xiàn)的呢?你肯定會(huì)說(shuō),我們?cè)谠O(shè)計(jì)窗口雙擊按鈕,就會(huì)自動(dòng)為我們生成類似如下的方法:(北大青鳥(niǎo)學(xué)校,北大青鳥(niǎo)課程)
private voi button1_Click(object sender, EventArgs e)
{
MessageBox.Show("我被點(diǎn)擊了。!");
}
其實(shí),這里用到的就是事件和委托,這里的button1_Click就是符合EventHandler委托規(guī)矩的一個(gè)具體的方法,即返回值為void,參數(shù)分別是一個(gè)object和EventArgs。
我們可以在Form1.Designer.cs中看到如下代碼:
this.button1.Click += new System.EventHandler(this.button1_Click);
可以看到,這里有一個(gè)Click事件,然后將一個(gè)委托實(shí)例附加到這個(gè)事件上,跟我們前面講的控制臺(tái)應(yīng)用程序中的用法是完全一樣的。那這個(gè)Click事件是怎么觸發(fā)的呢?對(duì)于這些系統(tǒng)類的事件,并不用我們管。
當(dāng)然,我們也可以定義自己的事件和委托,例如我定義一個(gè)事件,這個(gè)事件就是輸出對(duì)象的名字。(北大青鳥(niǎo)學(xué)校,北大青鳥(niǎo)課程)
北大青鳥(niǎo)學(xué)校撰寫(xiě)