[C#] (原創)一步一步教你自定義控件——05,Label(原生控件)


一、前言

技術沒有先進與落后,只有合適與不合適。

自定義控件可以分為三類:

一類是“無中生有”。就如之前文章中的的那些控件,都是繼承基類Control,來實現特定的功能效果;

一類是“有則改之”。是對原生控件的改造,以達到特定的功能效果;

一類是“用戶控件”。是將多個控件進行組合,以實現比較復雜的功能效果。

本篇將實現第二類“有則改之”,通過改造最常用的控件:Label,來講解一下實現的基本流程。

 

相信看完的你,一定會有所收獲。

本文地址:https://www.cnblogs.com/lesliexin/p/14165466.html

 


二、前期分析

(一)為什么要改造原生控件

之所以要改造原生控件,是因為原生控件在某些方面不符合自己的需要。

對於Label而言,當Label的屬性:AutoEllipsis=True,AutoSize=False,且文本長度超過Label寬度時(此時Label文本最后幾個字符會變成“...”)。如果將鼠標放在Label上,則會自動彈出懸浮提示,提示文本為當前Label的內容。

這個自動彈出懸浮提示的功能是很人性化的,但是在某些情況下我不想Label彈出懸浮提示,而Label並沒有一個開放的屬性去控件,所以需要對Label進行改造,以達到懸浮提示可控制化。

(二)預期效果

通過一個公開屬性,去控制Label是否自動彈出懸浮提示。

 


 

三、開始實現

(一)前期准備

新建類:LLabel.cs(注:不可與系統Label重名,雖然是對系統控件的改造,但其實是實現一個新的控件)

添加繼承:Label(需要添加引用:System.Windows.Forms.dll)

(注:此處與之前文章不同,之前文章中都是繼承Control的。現在因為要對Label進行改造,所以要繼承Label)

修改可訪問性為:public

 

(二)添加屬性

 1,是否啟用自動彈出懸浮提示

我們將通過本屬性來控制是否自動彈出懸浮提示。

 

在這里,我們除了之前使用過的“Category”(分類)和“Description”(描述)外,還使用了一個新的“DefaultValue”(默認值)。效果是指示當前屬性的默認值,在設計器窗口的“屬性”窗口中,如果屬性是默認值,則屬性值顯示為標准字體,如果不是默認值,則顯示為粗體。

 

 

(三)重寫事件

因為是對原生控件的改造,所以不再添加事件,而是對當前事件重寫。

 1,OnMouseEnter

因為是在鼠標進行控件后,才彈出懸浮提示,所以,我們對需要對鼠標進入控件事件進行重寫,也就是重寫OnMouseEnter事件。

 

 


 

四、效果演示

如圖:

 

 

五、結束語

本篇對Label控件的改造非常簡單,也沒有涉及到太深的內容。本篇更多的是為了讓大家對原生控件的改造有個整體的印象。

雖然每個人的需求都不一樣,對原生控件的所做改造也不一樣,但是整體的改造流程卻是類似的。

 


 

六、源代碼及工程下載

 https://files.cnblogs.com/files/lesliexin/06,LLabel.7z

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM