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

1、前言

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

自定義控件能夠分爲三類:字體

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

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

一類是「用戶控件」。是將多個控件進行組合,以實現比較複雜的功能效果。orm

本篇將實現第二類「有則改之」,經過改造最經常使用的控件:Label,來說解一下實現的基本流程。htm

 

相信看完的你,必定會有所收穫。blog

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

 


2、前期分析

(一)爲何要改造原生控件

之因此要改造原生控件,是由於原生控件在某些方面不符合本身的須要。事件

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

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

(二)預期效果

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

 


 

3、開始實現

(一)前期準備

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

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

(注:此處與以前文章不一樣,以前文章中都是繼承Control的。如今由於要對Label進行改造,因此要繼承Label)

修改可訪問性爲:public

 

(二)添加屬性

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

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

 

在這裏,咱們除了以前使用過的「Category」(分類)和「Description」(描述)外,還使用了一個新的「DefaultValue」(默認值)。效果是指示當前屬性的默認值,在設計器窗口的「屬性」窗口中,若是屬性是默認值,則屬性值顯示爲標準字體,若是不是默認值,則顯示爲粗體。

 

 

(三)重寫事件

由於是對原生控件的改造,因此再也不添加事件,而是對當前事件重寫。

 1,OnMouseEnter

由於是在鼠標進行控件後,才彈出懸浮提示,因此,咱們對須要對鼠標進入控件事件進行重寫,也就是重寫OnMouseEnter事件。

 

 


 

4、效果演示

如圖:

 

 

5、結束語

本篇對Label控件的改造很是簡單,也沒有涉及到太深的內容。本篇更多的是爲了讓你們對原生控件的改造有個總體的印象。

雖然每一個人的需求都不同,對原生控件的所作改造也不同,可是總體的改造流程倒是相似的。

 


 

6、源代碼及工程下載

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

相關文章
相關標籤/搜索