一、前言
技術沒有先進與落后,只有合適與不合適,
自定義控制元件可以分為三類:
一類是“無中生有”,就如之前文章中的的那些控制元件,都是繼承基類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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/238853.html
標籤:WinForm
上一篇:科研求助
下一篇:C#獲取windows系統的圖示
