C#創(chuàng)建自定義控件及添加自定義屬性和事件使用實(shí)例詳解
前言
C#本身提供了很強(qiáng)大的控件庫(kù),但是很多控件庫(kù)的功能只是一些基本的功能,就比如最簡(jiǎn)單的按鈕,C#提供了最基礎(chǔ)的按鈕使用方法,但是如果要增加一些功能,比如按鈕按下要一個(gè)圖片,彈起要另一個(gè)圖片這樣的工作。當(dāng)然,我們可以對(duì)相關(guān)按鈕在點(diǎn)擊函數(shù)中進(jìn)行更改其背景圖片,但是這對(duì)于大量的按鈕調(diào)用來(lái)說(shuō)十分不方便,代碼重用率相當(dāng)?shù)母?,?huì)導(dǎo)致使用上的卡頓,在這種情況下,我們可以將這個(gè)功能封裝起來(lái),這樣每次調(diào)用起來(lái)就很方便,也節(jié)省了代碼的重用率。
那么如何將上述的那么一個(gè)簡(jiǎn)單的功能封裝起來(lái)呢,我們首先考慮到的便是按鍵的屬性,我們可以在相關(guān)按鍵中添加新的屬性來(lái)完成這一步操作。
首先先建立一個(gè)用戶(hù)類(lèi)庫(kù):
然后再該類(lèi)庫(kù)下添加一個(gè)新的組件:

在組件中我們需要首先繼承Button類(lèi)

然后需要添加新的屬性供新的控件使用,這里我們添加四個(gè)屬性:1、按鈕按下的圖片 2、按鈕開(kāi)啟時(shí)的圖片 3、按鈕關(guān)閉時(shí)的圖片 4、該按鈕是單次點(diǎn)擊型還是開(kāi)光狀態(tài)型的模式選擇。

在該部分,首先需要定義存儲(chǔ)默認(rèn)狀態(tài)的量,如上圖所示,存儲(chǔ)各個(gè)圖片的默認(rèn)值為null。Description參數(shù)為屬性的說(shuō)明注釋?zhuān)珻ategory屬性為當(dāng)前該屬性所屬的類(lèi),下面定義的函數(shù)為將用戶(hù)選擇的參數(shù)進(jìn)行返回和獲取的一個(gè)過(guò)程,用戶(hù)定義的屬性名即函數(shù)名。
函數(shù)體為常見(jiàn)的{get;set;}形式:

該部分將用戶(hù)選擇的參數(shù)賦值給之前定義的圖片文件,至此為止屬性已經(jīng)簡(jiǎn)單的添加完畢,如將該文件編譯得到的dll文件導(dǎo)入庫(kù)中進(jìn)行使用,我們會(huì)發(fā)現(xiàn),拖出來(lái)的按鈕控件下面已經(jīng)多了上面定義的所有屬性。
但是這些屬性還并沒(méi)有用,只是簡(jiǎn)單的進(jìn)行了賦值,要讓這些屬性進(jìn)行動(dòng)作,需要在按鈕中添加新的事件。這里我們添加了兩個(gè)事件,一個(gè)是鼠標(biāo)按下的事件,還有一個(gè)鼠標(biāo)彈起的按鍵:

上面的部分就是簡(jiǎn)單的一些按鈕屬性設(shè)置,比如將按鈕背景變透明之類(lèi)的。
添加的新的事件中,我們需要對(duì)按鈕的相應(yīng)動(dòng)作進(jìn)行相應(yīng),在按下時(shí)獲得按下時(shí)的圖片,在彈起時(shí)獲得彈起時(shí)的圖片即可。


這里buttonflag為定義的一個(gè)public變量,用戶(hù)可以在使用Click事件中判斷是否開(kāi)啟成功,若沒(méi)有開(kāi)啟成功可以將該變量置為原來(lái)的值,按鈕相應(yīng)的也不會(huì)發(fā)生變化。
state用來(lái)判斷該按鈕是否是單次點(diǎn)擊的按鈕,如果是,那彈起時(shí)還是原來(lái)的圖片。有些按鍵沒(méi)有按下時(shí)的圖片,也不予變化。
至此為止,一個(gè)新的封裝已經(jīng)制作完畢,將該文件編譯為dll并加載到工程中就能看到效果了,下面是測(cè)試效果圖:

這是一個(gè)帶按下動(dòng)畫(huà)的按鈕。

這是一個(gè)不帶按下動(dòng)畫(huà)的按鈕。

這是一個(gè)單次點(diǎn)擊的按鈕。
總結(jié)
到此這篇關(guān)于C#創(chuàng)建自定義控件及添加自定義屬性和事件使用的文章就介紹到這了,更多相關(guān)C#創(chuàng)建自定義控件及添加自定義屬性和事件使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# OpenVINO實(shí)現(xiàn)圖片旋轉(zhuǎn)角度檢測(cè)
這篇文章主要為大家詳細(xì)介紹了C#?OpenVINO如何實(shí)現(xiàn)圖片旋轉(zhuǎn)角度檢測(cè),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
MVVM簡(jiǎn)化的Messager類(lèi)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于MVVM簡(jiǎn)化的Messager類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
在多線程中調(diào)用winform窗體控件的實(shí)現(xiàn)方法
這篇文章主要介紹了在多線程中調(diào)用winform窗體控件的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)的中國(guó)移動(dòng)官網(wǎng)手機(jī)號(hào)碼采集器
這篇文章主要介紹了C#實(shí)現(xiàn)的中國(guó)移動(dòng)官網(wǎng)手機(jī)號(hào)碼采集器,本文先是采集號(hào)碼入庫(kù),同時(shí)給出了篩選各類(lèi)靚號(hào)的SQL語(yǔ)句,需要的朋友可以參考下2014-10-10
C#和SQL實(shí)現(xiàn)的字符串相似度計(jì)算代碼分享
這篇文章主要介紹了C#和SQL實(shí)現(xiàn)的字符串相似度計(jì)算代碼分享,本文分別給出了C#語(yǔ)言和SQL語(yǔ)言的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-10-10
C# 正則判斷一個(gè)數(shù)字的格式是否有逗號(hào)的代碼
c#正則判斷一個(gè)格式化數(shù)字里是否有逗號(hào)的解決方法2008-07-07
C#中WPF ListView綁定數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了C#中WPF ListView綁定數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10
DevExpress實(shí)現(xiàn)GridControl同步列頭checkbox與列中checkbox狀態(tài)
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl同步列頭checkbox與列中checkbox狀態(tài),需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)打開(kāi)指定目錄和指定文件的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)打開(kāi)指定目錄、打開(kāi)指定目錄且選中指定文件、打開(kāi)指定文件,感興趣的小伙伴可以嘗試一下2022-06-06
.NET WinForm實(shí)現(xiàn)在listview中添加progressbar的方法
這篇文章主要介紹了.NET WinForm實(shí)現(xiàn)在listview中添加progressbar的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了進(jìn)度條控件的添加與使用方法,需要的朋友可以參考下2017-05-05

