【新閣教育】C#在自定義事件里傳遞自定義數(shù)據(jù)

????? ?對(duì)于一般的系統(tǒng)事件,是有兩個(gè)參數(shù)的,一個(gè)是sender,一個(gè)是EventArgs,對(duì)于sender,我們可能用得還比較多一些,它表示這個(gè)事件的觸發(fā)者,一般指向的是一個(gè)控件,但是對(duì)于EventArgs,我們一般用得會(huì)比較少,今天分享的自定義事件傳值就是通過EventArgs來(lái)實(shí)現(xiàn)。
【基礎(chǔ)篇】
??????通過EventArgs來(lái)實(shí)現(xiàn)傳值,我們首先需要?jiǎng)?chuàng)建一個(gè)類,繼承EventArgs,我們可以將需要傳遞的數(shù)據(jù),直接在類里面定義成屬性,這里以傳遞一個(gè)布爾、一個(gè)浮點(diǎn)數(shù)為例,代碼如下所示:

????????然后我們創(chuàng)建一個(gè)類,類里面創(chuàng)建一個(gè)事件,并激發(fā)事件,這里傳遞的值為True和123.0,代碼如下:

????????我們?cè)谥鞔绑w中,實(shí)例化類,并進(jìn)行事件綁定,看看能不能獲取到傳遞的數(shù)據(jù),代碼如下:

????????運(yùn)行結(jié)果如下所示:

【進(jìn)階篇】
????? ?在上面知識(shí)掌握的基礎(chǔ)上,我們可以做進(jìn)一步優(yōu)化,在定義事件時(shí),可以不用EventHandler,可以自己定義參數(shù)來(lái)實(shí)現(xiàn),我們?cè)賱?chuàng)建一個(gè)類——Test2,代碼如下:

????????這樣我們?cè)谑录幚碇?,就可以直接獲取屬性了,而不需要對(duì)EventArgs進(jìn)行強(qiáng)制轉(zhuǎn)換,代碼如下:

【高級(jí)篇】
????????如果繼續(xù)深入的話,我們可以將傳遞的參數(shù)改成泛型,這樣就可以輕松傳遞單個(gè)參數(shù)了,對(duì)于多個(gè)參數(shù)的情形,我們可以使用對(duì)象,單一參數(shù)比較簡(jiǎn)單,這里就不贅述了,主要針對(duì)對(duì)象傳遞進(jìn)行說(shuō)明,首先創(chuàng)建一個(gè)參數(shù)實(shí)體類,這里創(chuàng)建三個(gè)屬性,代碼如下:

創(chuàng)建事件參數(shù)類,代碼如下:

再創(chuàng)建一個(gè)類——Test3,代碼如下:

主窗體調(diào)用并進(jìn)行事件處理,代碼如下:

運(yùn)行結(jié)果如下:

總結(jié):這樣我們就通過三種不同的方式實(shí)現(xiàn)了自定義事件的參數(shù)傳值。