[C#] (原創)一步一步教你自定義控制項——06,MaskLayer(遮罩層)

一、前言

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

本篇的自定義控制項是:遮罩層(MaskLayer)。

遮罩層對軟體的美觀與易用性上的提高是很大的,在日常使用過程中也會經常看到各種遮罩層,雖然WinForm本身沒有原生的遮罩層控制項,但實現起來並不麻煩。

遮罩層的實現方式一般有兩種:一種是基於自定義控制項,一種是基於Form窗體。兩種方式並無優劣之分。

本篇採用的方式是自定義控制項,同之前一樣,繼承Control去實現遮罩層。

 

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

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


二、前期分析

(一)實現目標及特點

1,支援透明度

透明度是遮罩層的靈魂所在。

2,支援添加控制項

支援添加控制項可以實現更多的功能效果,除最常用的進度顯示外,還可以當作特殊的彈出窗口使用。

示例如下:

(1)添加GIF圖

 

(2)添加進度條

 

(3)添加自定義控制項

 

(4)隨意添加控制項

 

3,支援點擊關閉

遮罩層在日常使用中,往往是「揮之取去」,很輕便。所以需要支援點擊關閉。

 

 


 

三、開始實現

(一)前期準備。

此處僅作提綱,具體操作見前篇。

新建類:LMaskLayer.cs

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

修改可訪問性為:public

(二)添加屬性

1,透明度

用來控制遮罩層的透明度。

2,顯示狀態

用於獲取遮罩層是否處於顯示狀態。

3,是否單擊關閉

是否支援單擊關閉

(三)重寫方法

1,OnPaint

用於繪製帶透明度的背景。

2,OnClick

用於實現單擊關閉。

(四)添加方法

1,顯示遮罩層

2,隱藏遮罩層

(五)其他

1,構造函數

用於設置一些控制項的樣式和行為。

2,特性標籤

使遮罩層支援像Panel等容器控制項那樣在設計器中添加其它控制項。

示例如下:

(註:因為未對進行是否處於設計器狀態進行判斷,所以在設計器中添加控制項時會發生重繪,進而導致背景越來越黑,但並不影響運行時效果。)


 

四、效果演示

遮罩層的使用方式有兩種,一種是使用設計器,直接在設計器上添加想要的控制項,再進行調用。一種是在程式碼中手動實現。

設計器方式優點:直觀、簡單;缺點:佔用空間,影響布局效果。

程式碼方式優點:靈活,無累贅;缺點:效果不夠直觀,需要一定經驗。

本次演示,使用設計器方式。

1,總體設計預覽

2,相關說明

(1)上圖右側5個為5個遮罩層。

(2)在上節中「構造函數」中,我們設置了遮罩層默認的Visible=false,即:不可見。所以在運行時,這5個控制項是看不見的。

3,演示

 

 


 

 

五、結束語

本文只是起一個拋磚引玉的作用,讀者不要被我的思路所限制,你可以盡情的去實現你想要的效果。

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

所以,對自己掌握的知識多抱有一些信心,盡情釋放自己的想像力,並在實踐中提升自己。

 


 

六、源程式碼及工程下載

 //files.cnblogs.com/files/lesliexin/07,MaskLayer.7z